IopRegistryCallback
VOID __stdcall IopRegistryCallback(PVOID CallbackContext, _IO_STATUS_BLOCK *IoStatusBlock){
WCHAR v2;
wchar_t *v3;
__int64 v4;
wchar_t **v5;
struct _IO_STATUS_BLOCK *v6;
bool v7;
BOOL WatchTree;
BOOL Asynchronous;
UNICODE_STRING Path;
UINT8 FoundFullPath;
PVOID Handle;
Handle = 0i64;
v3 = (wchar_t *)(unsigned int)CallbackContext;
v4 = 14i64 * (unsigned int)CallbackContext;
Path = 0i64;
FoundFullPath = 0;
RtlInitUnicodeString(&Path, (&IopRegistryRegisteredCallbacks)[v4], v2);
v5 = &(&IopRegistryRegisteredCallbacks)[v4];
v5[8] = 0i64;
v5[10] = (wchar_t *)IopRegistryCallback;
v5[11] = v3;
if( (*(_DWORD *)(&IopRegistryRegisteredCallbacks + v4 + 5) & 1) != 0 )
{
((void(__fastcall *)(_QWORD))(&IopRegistryRegisteredCallbacks)[v4 + 1])(*(&IopRegistryRegisteredCallbacks + v4 + 3));
LOBYTE(Asynchronous) = 1;
v6 = (struct _IO_STATUS_BLOCK *)&(&IopRegistryRegisteredCallbacks)[v4 + 6];
LOBYTE(WatchTree) = 1;
if( ZwNotifyChangeKey(
(&IopRegistryRegisteredCallbacks)[v4 + 2],
0i64,
(PIO_APC_ROUTINE)(v5 + 8),
(PVOID)1,
v6,
*((_DWORD *)&IopRegistryRegisteredCallbacks + 2 * v4 + 2),
WatchTree,
0i64,
0,
Asynchronous) >= 0 )
return;
}
else
{
v6 = (struct _IO_STATUS_BLOCK *)&(&IopRegistryRegisteredCallbacks)[v4 + 6];
}
if( (int)IopRegistryOpenDeepestPath(&Path, &Handle, &FoundFullPath) < 0 )
goto LABEL_10;
ZwClose((&IopRegistryRegisteredCallbacks)[v4 + 2]);
v7 = FoundFullPath == 1;
(&IopRegistryRegisteredCallbacks)[v4 + 2] = (wchar_t *)Handle;
if( v7 )
{
*((_DWORD *)&IopRegistryRegisteredCallbacks + 2 * v4 + 10) |= 1u;
((void(__fastcall *)(_QWORD))(&IopRegistryRegisteredCallbacks)[v4 + 1])(*(&IopRegistryRegisteredCallbacks + v4 + 3));
}
LOBYTE(Asynchronous) = 1;
LOBYTE(WatchTree) = 1;
if( ZwNotifyChangeKey(
(&IopRegistryRegisteredCallbacks)[v4 + 2],
0i64,
(PIO_APC_ROUTINE)(v5 + 8),
(PVOID)1,
v6,
*((_DWORD *)&IopRegistryRegisteredCallbacks + 2 * v4 + 2),
WatchTree,
0i64,
0,
Asynchronous) < 0 )
{
LABEL_10:
ZwClose((&IopRegistryRegisteredCallbacks)[v4 + 2]);
*((_DWORD *)&IopRegistryRegisteredCallbacks + 2 * v4 + 2) = 0;
}
}Referenced by:
No references.