IopFilterResourceRequirementsCall
NTSTATUS __stdcall IopFilterResourceRequirementsCall(
_DEVICE_OBJECT *DeviceObject,
_IO_RESOURCE_REQUIREMENTS_LIST *ResReqList,
PVOID *Information){
__int64 v5;
_ADAPTER_OBJECT *v6;
INT64 v7;
VOID **Irp;
_IRP *v9;
_IO_STACK_LOCATION *CurrentStackLocation;
NTSTATUS v11;
__int128 v13;
__int128 Object;
__int64 v15;
Object = 0i64;
v15 = 0i64;
v13 = 0i64;
LODWORD(v5) = IoGetAttachedDeviceReference((INT64)DeviceObject, (INT64)ResReqList, (INT64)Information);
v6 = (_ADAPTER_OBJECT *)v5;
LOBYTE(v7) = *(_BYTE *)(v5 + 76);
Irp = IoAllocateIrp(v7, 0);
v9 = (_IRP *)Irp;
if( Irp )
{
IovUtilWatermarkIrp((_IRP *)Irp, 1ui64);
if( ResReqList )
{
v9->IoStatus.Status = 0;
*((_QWORD *)&v13 + 1) = ResReqList;
v9->IoStatus.Information = (unsigned __int64)ResReqList;
}
else
{
LODWORD(v13) = -1073741637;
v9->IoStatus.Status = -1073741637;
}
KeInitializeEvent((INT64)&Object, 1, 0);
v9->UserIosb = (_IO_STATUS_BLOCK *)&v13;
v9->UserEvent = (_KEVENT *)&Object;
v9->Tail.Thread = (_ETHREAD *)KeGetCurrentThread();
IopQueueThreadIrp(v9);
CurrentStackLocation = v9->Tail.CurrentStackLocation;
*(_WORD *)&CurrentStackLocation[-1].MajorFunction = 3355;
CurrentStackLocation[-1].Parameters.SecurityContext = (_IO_SECURITY_CONTEXT *)ResReqList;
v11 = IofCallDriver((UINT64)v6, (UINT64)v9);
if( v11 == 259 )
{
KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
v11 = v13;
}
*Information = (PVOID)*((_QWORD *)&v13 + 1);
}
else
{
v11 = -1073741670;
}
HalPutDmaAdapter(v6);
return v11;
}Referenced by:
IopQueryDeviceResources