| 476 | |
| 477 | |
| 478 | VOID PsCallImageNotifyRoutines( |
| 479 | _In_ PUNICODE_STRING ImageName, |
| 480 | _In_ HANDLE ProcessId, |
| 481 | _In_ PVOID FileObject, |
| 482 | _In_ PIMAGE_INFO_EX ImageInfoEx |
| 483 | ) { |
| 484 | PLOAD_IMAGE_NOTIFY_ROUTINE Routine; |
| 485 | PEX_CALLBACK_ROUTINE_BLOCK Callback; |
| 486 | |
| 487 | CriticalRegion critical; |
| 488 | AutoEnter<CriticalRegion> enter(critical); |
| 489 | |
| 490 | if (PspNotifyEnableMask & 1) { |
| 491 | ImageInfoEx->Size = sizeof(IMAGE_INFO_EX); |
| 492 | ImageInfoEx->ImageInfo.ExtendedInfoPresent = TRUE; |
| 493 | ImageInfoEx->FileObject = (FILE_OBJECT*)FileObject; |
| 494 | |
| 495 | for (ULONG i = 0; i < PSP_MAX_LOAD_IMAGE_NOTIFY; i++) { |
| 496 | Callback = ExReferenceCallBackBlock(&PspLoadImageNotifyRoutine[i]); |
| 497 | if (Callback != nullptr) { |
| 498 | Routine = (PLOAD_IMAGE_NOTIFY_ROUTINE)Callback->Function; |
| 499 | Routine(ImageName, |
| 500 | ProcessId, &ImageInfoEx->ImageInfo); |
| 501 | ExDereferenceCallBackBlock(&PspLoadImageNotifyRoutine[i], Callback); |
| 502 | } |
| 503 | } |
| 504 | } |
| 505 | } |
| 506 | |
| 507 | bool EnumSystemNotify(PEX_CALLBACK callback,ULONG count,KernelCallbackInfo* info) { |
| 508 | if (!callback) |
nothing calls this directly
no test coverage detected