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