PiSwStartCreate
NTSTATUS __stdcall PiSwStartCreate(
WCHAR *ParentDeviceInstanceId,
WCHAR *InstanceId,
WCHAR *HardwareIds,
WCHAR *CompatibleIds,
_GUID *ContainerId,
UINT64 CapabilityFlags,
WCHAR *DeviceDescription,
WCHAR *DeviceLocation,
VOID *SecurityDescriptor,
UINT64 SecurityDescriptorSize,
_DEVPROPERTY *Properties,
UINT64 PropertyCount){
_GUID *v15;
NTSTATUS result;
_SW_DEVICE_CREATE_IOCTL_DATA IoctlData[32];
__int64 v18;
_SW_DEVICE_CREATE_IOCTL_DATA v19;
memset(IoctlData, 0i64, 0x78u);
v18 = 0i64;
*(_QWORD *)IoctlData = L"DRIVERENUM";
*(_QWORD *)&IoctlData[14] = CapabilityFlags;
IoctlData[16] = (int)DeviceDescription;
*(_QWORD *)&IoctlData[18] = DeviceLocation;
*(_QWORD *)&IoctlData[20] = SecurityDescriptor;
IoctlData[22] = (int)Properties;
*(_QWORD *)&IoctlData[24] = SecurityDescriptorSize;
IoctlData[26] = v19;
*(_QWORD *)&IoctlData[2] = InstanceId;
v15 = ContainerId;
*(_QWORD *)&IoctlData[4] = HardwareIds;
*(_QWORD *)&IoctlData[28] = PropertyCount;
*(_QWORD *)&IoctlData[8] = CompatibleIds;
*(_QWORD *)&IoctlData[12] = ContainerId;
if( CompatibleIds )
{
result = PnpGetMultiSzLength((__int64)CompatibleIds, 1024i64, &v18);
if( result < 0 )
return result;
IoctlData[6] = v18;
}
if( v15 )
{
result = PnpGetMultiSzLength((__int64)v15, 1024i64, &v18);
if( result < 0 )
return result;
IoctlData[10] = v18;
}
return PiSwIrpStartCreateWorker(IoctlData, 0i64);
}Referenced by:
PiCreateDriverSwDeviceCallback