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