├── .gitattributes ├── .gitignore ├── APIC_IPI_DEMO ├── APIC_IPI_DEMO.sln ├── APIC_IPI_DEMO │ ├── APIC_IPI_DEMO.inf │ ├── APIC_IPI_DEMO.vcxproj │ ├── APIC_IPI_DEMO.vcxproj.filters │ ├── APIC_IPI_DEMO.vcxproj.user │ ├── Driver.cpp │ ├── PauseCPU.cpp │ ├── PauseCPU.h │ ├── Util.cpp │ ├── Util.h │ └── x64 │ │ └── Debug │ │ └── APIC_IPI_DEMO.inf └── x64 │ └── Debug │ ├── APIC_IPI_DEMO.cer │ ├── APIC_IPI_DEMO.inf │ ├── APIC_IPI_DEMO.pdb │ ├── APIC_IPI_DEMO.sys │ └── APIC_IPI_DEMO │ ├── APIC_IPI_DEMO.inf │ ├── APIC_IPI_DEMO.sys │ └── apic_ipi_demo.cat └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | 42 | # Directories potentially created on remote AFP share 43 | .AppleDB 44 | .AppleDesktop 45 | Network Trash Folder 46 | Temporary Items 47 | .apdisk 48 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/APIC_IPI_DEMO.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APIC_IPI_DEMO", "APIC_IPI_DEMO\APIC_IPI_DEMO.vcxproj", "{9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|ARM = Debug|ARM 11 | Debug|ARM64 = Debug|ARM64 12 | Debug|x64 = Debug|x64 13 | Debug|x86 = Debug|x86 14 | Release|ARM = Release|ARM 15 | Release|ARM64 = Release|ARM64 16 | Release|x64 = Release|x64 17 | Release|x86 = Release|x86 18 | EndGlobalSection 19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 20 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|ARM.ActiveCfg = Debug|ARM 21 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|ARM.Build.0 = Debug|ARM 22 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|ARM.Deploy.0 = Debug|ARM 23 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|ARM64.ActiveCfg = Debug|ARM64 24 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|ARM64.Build.0 = Debug|ARM64 25 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|ARM64.Deploy.0 = Debug|ARM64 26 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|x64.ActiveCfg = Debug|x64 27 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|x64.Build.0 = Debug|x64 28 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|x64.Deploy.0 = Debug|x64 29 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|x86.ActiveCfg = Debug|Win32 30 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|x86.Build.0 = Debug|Win32 31 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Debug|x86.Deploy.0 = Debug|Win32 32 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|ARM.ActiveCfg = Release|ARM 33 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|ARM.Build.0 = Release|ARM 34 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|ARM.Deploy.0 = Release|ARM 35 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|ARM64.ActiveCfg = Release|ARM64 36 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|ARM64.Build.0 = Release|ARM64 37 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|ARM64.Deploy.0 = Release|ARM64 38 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|x64.ActiveCfg = Release|x64 39 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|x64.Build.0 = Release|x64 40 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|x64.Deploy.0 = Release|x64 41 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|x86.ActiveCfg = Release|Win32 42 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|x86.Build.0 = Release|Win32 43 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900}.Release|x86.Deploy.0 = Release|Win32 44 | EndGlobalSection 45 | GlobalSection(SolutionProperties) = preSolution 46 | HideSolutionNode = FALSE 47 | EndGlobalSection 48 | EndGlobal 49 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/APIC_IPI_DEMO/APIC_IPI_DEMO.inf: -------------------------------------------------------------------------------- 1 | ; 2 | ; APIC_IPI_DEMO.inf 3 | ; 4 | 5 | [Version] 6 | Signature="$WINDOWS NT$" 7 | Class=Sample 8 | ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} 9 | Provider=%ManufacturerName% 10 | DriverVer=01/03/2017,17.41.53.254 11 | CatalogFile=APIC_IPI_DEMO.cat 12 | 13 | [DestinationDirs] 14 | DefaultDestDir = 12 15 | 16 | 17 | [SourceDisksNames] 18 | 1 = %DiskName%,,,"" 19 | 20 | [SourceDisksFiles] 21 | 22 | 23 | [Manufacturer] 24 | %ManufacturerName%=Standard,NT$ARCH$ 25 | 26 | [Standard.NT$ARCH$] 27 | 28 | 29 | [Strings] 30 | ManufacturerName="KelvinChan" 31 | ClassName="" 32 | DiskName="APIC_IPI_DEMO Source Disk" 33 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/APIC_IPI_DEMO/APIC_IPI_DEMO.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | Debug 22 | ARM 23 | 24 | 25 | Release 26 | ARM 27 | 28 | 29 | Debug 30 | ARM64 31 | 32 | 33 | Release 34 | ARM64 35 | 36 | 37 | 38 | {9EEC0D15-E9A6-4EF1-8EB0-6A3947DE3900} 39 | {dd38f7fc-d7bd-488b-9242-7d8754cde80d} 40 | v4.5 41 | 12.0 42 | Debug 43 | Win32 44 | APIC_IPI_DEMO 45 | 46 | 47 | 48 | Windows10 49 | true 50 | WindowsKernelModeDriver10.0 51 | Driver 52 | WDM 53 | 54 | 55 | Windows10 56 | false 57 | WindowsKernelModeDriver10.0 58 | Driver 59 | WDM 60 | 61 | 62 | Windows7 63 | true 64 | WindowsKernelModeDriver10.0 65 | Driver 66 | WDM 67 | 68 | 69 | Windows10 70 | false 71 | WindowsKernelModeDriver10.0 72 | Driver 73 | WDM 74 | 75 | 76 | Windows10 77 | true 78 | WindowsKernelModeDriver10.0 79 | Driver 80 | WDM 81 | 82 | 83 | Windows10 84 | false 85 | WindowsKernelModeDriver10.0 86 | Driver 87 | WDM 88 | 89 | 90 | Windows10 91 | true 92 | WindowsKernelModeDriver10.0 93 | Driver 94 | WDM 95 | 96 | 97 | Windows10 98 | false 99 | WindowsKernelModeDriver10.0 100 | Driver 101 | WDM 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | DbgengKernelDebugger 113 | true 114 | 115 | 116 | DbgengKernelDebugger 117 | 118 | 119 | DbgengKernelDebugger 120 | 121 | 122 | DbgengKernelDebugger 123 | 124 | 125 | DbgengKernelDebugger 126 | 127 | 128 | DbgengKernelDebugger 129 | 130 | 131 | DbgengKernelDebugger 132 | 133 | 134 | DbgengKernelDebugger 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/APIC_IPI_DEMO/APIC_IPI_DEMO.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | {8E41214B-6785-4CFE-B992-037D68949A14} 18 | inf;inv;inx;mof;mc; 19 | 20 | 21 | 22 | 23 | Driver Files 24 | 25 | 26 | 27 | 28 | Source Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Source Files 35 | 36 | 37 | 38 | 39 | Header Files 40 | 41 | 42 | Header Files 43 | 44 | 45 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/APIC_IPI_DEMO/APIC_IPI_DEMO.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/APIC_IPI_DEMO/Driver.cpp: -------------------------------------------------------------------------------- 1 | extern "C" 2 | { 3 | #include 4 | #include "PauseCPU.h" 5 | #include "Util.h" 6 | 7 | //----------------------------------------------------------------------------------------- 8 | VOID DriverUnload( 9 | _In_ struct _DRIVER_OBJECT *DriverObject 10 | ) 11 | { 12 | UNREFERENCED_PARAMETER(DriverObject); 13 | APIC_IPI_DEBUG_INFO("Unloaded Driver"); 14 | } 15 | 16 | //--------------------------------------------------------------------------------------------------------------- 17 | _IRQL_requires_min_(IPI_LEVEL) ULONG __stdcall TestDemo( 18 | PVOID params 19 | ) 20 | { 21 | UNREFERENCED_PARAMETER(params); 22 | 23 | int i = 0; 24 | while (i < 10) 25 | { 26 | APIC_IPI_DEBUG_INFO("We dun Suspend Id: %x i: %d \r\n", KeGetCurrentProcessorNumberEx(nullptr), i); 27 | i++; 28 | } 29 | return 0; 30 | } 31 | 32 | //----------------------------------------------------------------------------------------- 33 | NTSTATUS DriverEntry( 34 | PDRIVER_OBJECT driver_object, 35 | PUNICODE_STRING unicode 36 | ) 37 | { 38 | NTSTATUS status = STATUS_SUCCESS; 39 | UNREFERENCED_PARAMETER(unicode); 40 | 41 | driver_object->DriverUnload = DriverUnload; 42 | 43 | APIC_IPI_COMMON_DBG_BREAK(); 44 | 45 | InitSyncProcedure(TestDemo); 46 | 47 | return status; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/APIC_IPI_DEMO/PauseCPU.cpp: -------------------------------------------------------------------------------- 1 | extern "C" 2 | { 3 | #include "Util.h" 4 | #include "PauseCPU.h" 5 | 6 | //----------------------------------------------------------------------------------------- 7 | ULONG_PTR BroadCaster( 8 | _In_ ULONG_PTR Argument 9 | ) 10 | { 11 | MCONTEXT* context = (MCONTEXT*)Argument; 12 | 13 | //other CPU 14 | if (KeGetCurrentProcessorNumberEx(nullptr) != context->ProcessorId) 15 | { 16 | APIC_IPI_DEBUG_INFO("Core: %d is Waiting... \r\n", KeGetCurrentProcessorNumberEx(nullptr)); 17 | 18 | InterlockedDecrement(&context->RunningProcessor); 19 | 20 | while (context->Done == FALSE) 21 | { 22 | YieldProcessor(); 23 | } 24 | 25 | InterlockedDecrement(&context->ProcessorsToResume); 26 | 27 | APIC_IPI_DEBUG_INFO("Core %d is Resuming... \r\n", KeGetCurrentProcessorNumberEx(nullptr)); 28 | 29 | } 30 | //current CPU (a CPU we want it works) 31 | else 32 | { 33 | while (context->RunningProcessor != 0) 34 | { 35 | YieldProcessor(); 36 | } 37 | 38 | APIC_IPI_DEBUG_INFO("----- start sync jobs by Core: %d ----- \r\n", KeGetCurrentProcessorNumberEx(nullptr)); 39 | if (context->callback) 40 | { 41 | context->callback(context->Params); 42 | } 43 | APIC_IPI_DEBUG_INFO("--------- finshed by Core: %d --------- \r\n", KeGetCurrentProcessorNumberEx(nullptr)); 44 | 45 | context->Done = TRUE; 46 | 47 | while (context->ProcessorsToResume != 0) 48 | { 49 | YieldProcessor(); 50 | } 51 | } 52 | return 0; 53 | } 54 | 55 | //--------------------------------------------------------------------------------------------------------------- 56 | VOID InitSyncProcedure( 57 | CALLBACK TestDemo 58 | ) 59 | { 60 | MCONTEXT* context = (MCONTEXT*)ExAllocatePool(NonPagedPool, PAGE_SIZE); 61 | context->ProcessorId = KeGetCurrentProcessorNumberEx(nullptr); 62 | context->RunningProcessor = KeNumberProcessors - 1; 63 | context->ProcessorsToResume = KeNumberProcessors - 1; 64 | context->callback = TestDemo; 65 | context->Params = NULL; 66 | context->Done = FALSE; 67 | 68 | if (KeNumberProcessors > 1) 69 | { 70 | //Send APIC IPI signal processors 71 | KeIpiGenericCall(BroadCaster, (ULONG_PTR)context); 72 | } 73 | else 74 | { 75 | context->callback(context->Params); 76 | } 77 | 78 | ExFreePool(context); 79 | } 80 | } -------------------------------------------------------------------------------- /APIC_IPI_DEMO/APIC_IPI_DEMO/PauseCPU.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | typedef ULONG (_IRQL_requires_min_(IPI_LEVEL) __stdcall *CALLBACK)(PVOID); 5 | 6 | #pragma pack(8) 7 | typedef struct MCONTEXT 8 | { 9 | ULONG ProcessorId; 10 | volatile LONG RunningProcessor; 11 | volatile LONG ProcessorsToResume; 12 | ULONG Done; 13 | CALLBACK callback; 14 | PVOID Params; 15 | }MCONTEXT, *PMCONTEXT; 16 | #pragma pack() 17 | 18 | VOID InitSyncProcedure(CALLBACK callback); 19 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/APIC_IPI_DEMO/Util.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KelvinMsft/SyncJobs_MPSystem/b25175f0029488edc55f04d53f3907eb97dda489/APIC_IPI_DEMO/APIC_IPI_DEMO/Util.cpp -------------------------------------------------------------------------------- /APIC_IPI_DEMO/APIC_IPI_DEMO/Util.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | /// Sets a break point that works only when a debugger is present 4 | #if !defined(APIC_IPI_COMMON_DBG_BREAK) 5 | #define APIC_IPI_COMMON_DBG_BREAK() \ 6 | if (KD_DEBUGGER_NOT_PRESENT) { \ 7 | } else { \ 8 | __debugbreak(); \ 9 | } \ 10 | reinterpret_cast(0) 11 | #endif 12 | 13 | #define APIC_IPI_DEBUG_INFO(format, ...) DbgPrintEx(0,0,format,__VA_ARGS__) 14 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO.inf: -------------------------------------------------------------------------------- 1 | ; 2 | ; APIC_IPI_DEMO.inf 3 | ; 4 | 5 | [Version] 6 | Signature="$WINDOWS NT$" 7 | Class=Sample 8 | ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} 9 | Provider=%ManufacturerName% 10 | DriverVer=01/13/2017,12.4.20.367 11 | CatalogFile=APIC_IPI_DEMO.cat 12 | 13 | [DestinationDirs] 14 | DefaultDestDir = 12 15 | 16 | 17 | [SourceDisksNames] 18 | 1 = %DiskName%,,,"" 19 | 20 | [SourceDisksFiles] 21 | 22 | 23 | [Manufacturer] 24 | %ManufacturerName%=Standard,NTamd64 25 | 26 | [Standard.NTamd64] 27 | 28 | 29 | [Strings] 30 | ManufacturerName="KelvinChan" 31 | ClassName="" 32 | DiskName="APIC_IPI_DEMO Source Disk" 33 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KelvinMsft/SyncJobs_MPSystem/b25175f0029488edc55f04d53f3907eb97dda489/APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO.cer -------------------------------------------------------------------------------- /APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO.inf: -------------------------------------------------------------------------------- 1 | ; 2 | ; APIC_IPI_DEMO.inf 3 | ; 4 | 5 | [Version] 6 | Signature="$WINDOWS NT$" 7 | Class=Sample 8 | ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} 9 | Provider=%ManufacturerName% 10 | DriverVer=01/13/2017,12.4.20.367 11 | CatalogFile=APIC_IPI_DEMO.cat 12 | 13 | [DestinationDirs] 14 | DefaultDestDir = 12 15 | 16 | 17 | [SourceDisksNames] 18 | 1 = %DiskName%,,,"" 19 | 20 | [SourceDisksFiles] 21 | 22 | 23 | [Manufacturer] 24 | %ManufacturerName%=Standard,NTamd64 25 | 26 | [Standard.NTamd64] 27 | 28 | 29 | [Strings] 30 | ManufacturerName="KelvinChan" 31 | ClassName="" 32 | DiskName="APIC_IPI_DEMO Source Disk" 33 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KelvinMsft/SyncJobs_MPSystem/b25175f0029488edc55f04d53f3907eb97dda489/APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO.pdb -------------------------------------------------------------------------------- /APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KelvinMsft/SyncJobs_MPSystem/b25175f0029488edc55f04d53f3907eb97dda489/APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO.sys -------------------------------------------------------------------------------- /APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO/APIC_IPI_DEMO.inf: -------------------------------------------------------------------------------- 1 | ; 2 | ; APIC_IPI_DEMO.inf 3 | ; 4 | 5 | [Version] 6 | Signature="$WINDOWS NT$" 7 | Class=Sample 8 | ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} 9 | Provider=%ManufacturerName% 10 | DriverVer=01/13/2017,12.4.20.367 11 | CatalogFile=APIC_IPI_DEMO.cat 12 | 13 | [DestinationDirs] 14 | DefaultDestDir = 12 15 | 16 | 17 | [SourceDisksNames] 18 | 1 = %DiskName%,,,"" 19 | 20 | [SourceDisksFiles] 21 | 22 | 23 | [Manufacturer] 24 | %ManufacturerName%=Standard,NTamd64 25 | 26 | [Standard.NTamd64] 27 | 28 | 29 | [Strings] 30 | ManufacturerName="KelvinChan" 31 | ClassName="" 32 | DiskName="APIC_IPI_DEMO Source Disk" 33 | -------------------------------------------------------------------------------- /APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO/APIC_IPI_DEMO.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KelvinMsft/SyncJobs_MPSystem/b25175f0029488edc55f04d53f3907eb97dda489/APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO/APIC_IPI_DEMO.sys -------------------------------------------------------------------------------- /APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO/apic_ipi_demo.cat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KelvinMsft/SyncJobs_MPSystem/b25175f0029488edc55f04d53f3907eb97dda489/APIC_IPI_DEMO/x64/Debug/APIC_IPI_DEMO/apic_ipi_demo.cat -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SyncJobs 2 | 3 | A Demo for the synchronization of Multi-Processor System by using APIC its IPI (Inter-Processor Interrupt) 4 | 5 | 6 | 7 | # Expected Result : 8 | 9 | 10 | 11 | 12 | 13 | --------------------------------------------------------------------------------