IoOpenDeviceInterfaceRegistryKey
VOID __fastcall IoOpenDeviceInterfaceRegistryKey(
_UNICODE_STRING *SymbolicLinkName,
UINT64 DesiredAccess,
VOID **DeviceInterfaceKey,
_BYTE *a4){
int v5;
INT64 v7;
_ETHREAD *CurrentThread;
UINT64 v9;
INT64 DesiredAccessa;
INT64 Create;
WCHAR *DeviceInterfaceName;
DeviceInterfaceName = 0i64;
v5 = DesiredAccess;
if( SymbolicLinkName
&& SymbolicLinkName->Buffer
&& SymbolicLinkName->Length
&& (int)PnpUnicodeStringToWstr((__int16 **)&DeviceInterfaceName, 0i64, &SymbolicLinkName->Length) >= 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite((UINT64)&PnpReplaceEvent + 6688, 1, v7);
LOBYTE(Create) = 1;
LODWORD(DesiredAccessa) = v5;
if( CmOpenDeviceInterfaceRegKey(
*(&stru_140CF2E80 + 607),
DeviceInterfaceName,
50i64,
v9,
DesiredAccessa,
Create,
DeviceInterfaceKey,
0i64) >= 0
&& DeviceInterfaceKey )
{
IopApplyMutableTagToRegistryKey((_HANDLE)*DeviceInterfaceKey);
}
ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 6688));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
}
PnpUnicodeStringToWstrFree(DeviceInterfaceName, (__int64)SymbolicLinkName);
}Referenced by:
IoWMISuggestInstanceName