IopWriteAllocatedResourcesToRegistry

NTSTATUS __stdcall IopWriteAllocatedResourcesToRegistry(
        _DEVICE_NODE *DeviceNode,
        _CM_RESOURCE_LIST *CmResourceList,
        UINT64 Length){
  _ETHREAD *CurrentThread; 
  int v4; 
  int v7; 
  _OBJECT_TYPE *v8; 
  NTSTATUS v9; 
  UINT64 DesiredAccess; 
  UINT64 Create; 
  _UNICODE_STRING ValueName; 
  VOID *KeyHandle; 

  KeyHandle = 0i64;
  ValueName = 0i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v4 = Length;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquireResourceSharedLite((UINT64)&PnpReplaceEvent + 6688, 1);
  LODWORD(DesiredAccess) = 983103;
  v7 = CmOpenDeviceRegKey(
         *(&stru_140CF2E80 + 607),
         DeviceNode->InstancePath.Buffer,
         CM_KEY_TYPE_DEVICE_CONTROL,
         0i64,
         DesiredAccess,
         1u,
         &KeyHandle,
         0i64);
  if( v7 >= 0 )
  {
    ValueName.Buffer = L"AllocConfig";
    *(_DWORD *)&ValueName.Length = 1572886;
    if( CmResourceList )
    {
      LODWORD(Create) = v4;
      v9 = ZwSetValueKey(KeyHandle, &ValueName, 0i64, 8ui64, CmResourceList, Create);
    }
    else
    {
      v9 = ZwDeleteValueKey(KeyHandle, &ValueName, v8);
    }
    v7 = v9;
    ZwClose((_HANDLE)KeyHandle);
  }
  ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 6688));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return v7;
}

Referenced by:

IoReportDetectedDevice
IopLegacyResourceAllocation
PnpBuildCmResourceLists
PnpReleaseResourcesInternal
PnpRestoreResourcesInternal