| 591 | } |
| 592 | |
| 593 | LONG GetObCallbackCount(POBJECT_TYPE objectType, ULONG callbackListOffset) { |
| 594 | PLIST_ENTRY callbackListHead = nullptr; |
| 595 | PLIST_ENTRY nextEntry = nullptr; |
| 596 | POB_CALLBACK_ENTRY callbackEntry = nullptr; |
| 597 | volatile LONG count = 0; |
| 598 | |
| 599 | if (!objectType) { |
| 600 | return count; |
| 601 | } |
| 602 | |
| 603 | callbackListHead = (PLIST_ENTRY)((PUCHAR)objectType + callbackListOffset); |
| 604 | nextEntry = callbackListHead->Flink; |
| 605 | |
| 606 | while (nextEntry != callbackListHead) { |
| 607 | callbackEntry = CONTAINING_RECORD(nextEntry, OB_CALLBACK_ENTRY, EntryItemList); |
| 608 | InterlockedIncrement(&count); |
| 609 | nextEntry = nextEntry->Flink; |
| 610 | } |
| 611 | |
| 612 | return count; |
| 613 | } |
| 614 | |
| 615 | NTSTATUS BackupFile(_In_ PUNICODE_STRING FileName) { |
| 616 | NTSTATUS status = STATUS_SUCCESS; |
no outgoing calls
no test coverage detected