PnpPrepareDriverLoading
__int64 __fastcall PnpPrepareDriverLoading(
_UNICODE_STRING *KeyName,
void *KeyHandle,
void *ImageBase,
unsigned int IsFilter,
unsigned int *PnpFlags){
IMAGE_NT_HEADERS *v9;
unsigned int v10;
PVOID v12;
UINT64 IsFiltera;
PVOID P;
GUID BlockedDriverGuid;
P = 0i64;
*PnpFlags = 0;
v9 = RtlImageNtHeader(ImageBase);
if( !v9 )
return 3221225473i64;
BlockedDriverGuid = 0i64;
LODWORD(IsFiltera) = IsFilter;
v10 = PpCheckInDriverDatabase(
KeyName,
KeyHandle,
ImageBase,
v9->OptionalHeader.SizeOfImage,
IsFiltera,
&BlockedDriverGuid);
if( v10 + 1073740949 <= 1 )
PnpSetBlockedDriverEvent(&BlockedDriverGuid);
if( IopGetRegistryValue(KeyHandle, (PWCHAR)&stru_1407D01E0.Xmm9, 0i64, (KEY_VALUE_FULL_INFORMATION **)&P) >= 0 )
{
v12 = P;
if( *((_DWORD *)P + 1) == 4 && *((_DWORD *)P + 3) == 4 )
*PnpFlags = *(_DWORD *)((char *)P + *((unsigned int *)P + 2));
ExFreePoolWithTag(v12, 0);
}
return v10;
}Referenced by:
IopInitializeBuiltinDriver
IopLoadDriver