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