/*
  plug and play services
*/
[
  uuid("8d9f4e40-a03d-11ce-8f69-08003e30051b"),
  version(1.0),
  helpstring("Plug and Play services")
]
interface ntsvcs
{
	/******************/
	/* Function: 0x00 */

	WERROR PNP_Disconnect();

	/******************/
	/* Function: 0x01 */

	WERROR PNP_Connect();

	/******************/
	/* Function: 0x02 */

	WERROR PNP_GetVersion(
		[out,ref] uint16 *version
		);

	/******************/
	/* Function: 0x03 */

	WERROR PNP_GetGlobalState();

	/******************/
	/* Function: 0x04 */

	WERROR PNP_InitDetection();

	/******************/
	/* Function: 0x05 */

	WERROR PNP_ReportLogOn();

	/******************/
	/* Function: 0x06 */

	WERROR PNP_ValidateDeviceInstance(
		[in,ref] [string,charset(UTF16)] uint16 *devicepath,
		[in] uint32 flags
		);

	/******************/
	/* Function: 0x07 */

	WERROR PNP_GetRootDeviceInstance();

	/******************/
	/* Function: 0x08 */

	WERROR PNP_GetRelatedDeviceInstance();

	/******************/
	/* Function: 0x09 */

	WERROR PNP_EnumerateSubKeys();

	/******************/
	/* Function: 0x0a */

	WERROR PNP_GetDeviceList();

	/******************/
	/* Function: 0x0b */

	WERROR PNP_GetDeviceListSize(
		[in,unique] [string,charset(UTF16)] uint16 *devicename,
		[out,ref] uint32 *size,
		[in] uint32 flags
		);

	/******************/
	/* Function: 0x0c */

	WERROR PNP_GetDepth();

	/******************/
	/* Function: 0x0d */

	const int DEV_REGPROP_DESC = 1;

	WERROR PNP_GetDeviceRegProp(
		[in,ref] [string,charset(UTF16)] uint16 *devicepath,
		[in] uint32 property,
		[in,out,ref] uint32 *unknown1,
		[out,ref] [size_is(*buffer_size)] [length_is(*buffer_size)] uint8 *buffer,
		[in,out,ref] uint32 *buffer_size,
		[in,out,ref] uint32 *needed,
		[in] uint32 unknown3
		);

	/******************/
	/* Function: 0x0e */

	WERROR PNP_SetDeviceRegProp();

	/******************/
	/* Function: 0x0f */

	WERROR PNP_GetClassInstance();

	/******************/
	/* Function: 0x10 */

	WERROR PNP_CreateKey();

	/******************/
	/* Function: 0x11 */

	WERROR PNP_DeleteRegistryKey();

	/******************/
	/* Function: 0x12 */

	WERROR PNP_GetClassCount();

	/******************/
	/* Function: 0x13 */

	WERROR PNP_GetClassName();

	/******************/
	/* Function: 0x14 */

	WERROR PNP_DeleteClassKey();

	/******************/
	/* Function: 0x15 */

	WERROR PNP_GetInterfaceDeviceAlias();

	/******************/
	/* Function: 0x16 */

	WERROR PNP_GetInterfaceDeviceList();

	/******************/
	/* Function: 0x17 */

	WERROR PNP_GetInterfaceDeviceListSize();

	/******************/
	/* Function: 0x18 */

	WERROR PNP_RegisterDeviceClassAssociation();

	/******************/
	/* Function: 0x19 */

	WERROR PNP_UnregisterDeviceClassAssociation();

	/******************/
	/* Function: 0x1a */

	WERROR PNP_GetClassRegProp();

	/******************/
	/* Function: 0x1b */

	WERROR PNP_SetClassRegProp();

	/******************/
	/* Function: 0x1c */

	WERROR PNP_CreateDevInst();

	/******************/
	/* Function: 0x1d */

	WERROR PNP_DeviceInstanceAction();

	/******************/
	/* Function: 0x1e */

	WERROR PNP_GetDeviceStatus();

	/******************/
	/* Function: 0x1f */

	WERROR PNP_SetDeviceProblem();

	/******************/
	/* Function: 0x20 */

	WERROR PNP_DisableDevInst();

	/******************/
	/* Function: 0x21 */

	WERROR PNP_UninstallDevInst();

	/******************/
	/* Function: 0x22 */

	WERROR PNP_AddID();

	/******************/
	/* Function: 0x23 */

	WERROR PNP_RegisterDriver();

	/******************/
	/* Function: 0x24 */

	WERROR PNP_QueryRemove();

	/******************/
	/* Function: 0x25 */

	WERROR PNP_RequestDeviceEject();

	/******************/
	/* Function: 0x26 */

	WERROR PNP_IsDockStationPresent();

	/******************/
	/* Function: 0x27 */

	WERROR PNP_RequestEjectPC();

	/******************/
	/* Function: 0x28 */

	WERROR PNP_HwProfFlags(
		[in] uint32 unknown1,
		[in,ref] [string,charset(UTF16)] uint16 *devicepath,
		[in] uint32 unknown2,
		[in,out,ref] uint32 *unknown3,
		[in,out,unique] uint16 *unknown4,
		[in,unique] [string,charset(UTF16)] uint16 *unknown5,
		[out,unique] [string,charset(UTF16)] uint16 **unknown5a,
		[in] uint32 unknown6,
		[in] uint32 unknown7
		);

	/******************/
	/* Function: 0x29 */

	typedef struct {
		uint32 unknown1;
		uint16 unknown2[160];
		uint32 unknown3;
	} PNP_HwProfInfo;

	WERROR PNP_GetHwProfInfo(
		[in] uint32 idx,
		[in,out,ref] PNP_HwProfInfo *info,
		[in] uint32 unknown1,
		[in] uint32 unknown2
		);

	/******************/
	/* Function: 0x2a */

	WERROR PNP_AddEmptyLogConf();

	/******************/
	/* Function: 0x2b */

	WERROR PNP_FreeLogConf();

	/******************/
	/* Function: 0x2c */

	WERROR PNP_GetFirstLogConf();

	/******************/
	/* Function: 0x2d */

	WERROR PNP_GetNextLogConf();

	/******************/
	/* Function: 0x2e */

	WERROR PNP_GetLogConfPriority();

	/******************/
	/* Function: 0x2f */

	WERROR PNP_AddResDes();

	/******************/
	/* Function: 0x30 */

	WERROR PNP_FreeResDes();

	/******************/
	/* Function: 0x31 */

	WERROR PNP_GetNextResDes();

	/******************/
	/* Function: 0x32 */

	WERROR PNP_GetResDesData();

	/******************/
	/* Function: 0x33 */

	WERROR PNP_GetResDesDataSize();

	/******************/
	/* Function: 0x34 */

	WERROR PNP_ModifyResDes();

	/******************/
	/* Function: 0x35 */

	WERROR PNP_DetectResourceLimit();

	/******************/
	/* Function: 0x36 */

	WERROR PNP_QueryResConfList();

	/******************/
	/* Function: 0x37 */

	WERROR PNP_SetHwProf();

	/******************/
	/* Function: 0x38 */

	WERROR PNP_QueryArbitratorFreeData();

	/******************/
	/* Function: 0x39 */

	WERROR PNP_QueryArbitratorFreeSize();

	/******************/
	/* Function: 0x3a */

	WERROR PNP_RunDetection();

	/******************/
	/* Function: 0x3b */

	WERROR PNP_RegisterNotification();

	/******************/
	/* Function: 0x3c */

	WERROR PNP_UnregisterNotification();

	/******************/
	/* Function: 0x3d */

	WERROR PNP_GetCustomDevProp();

	/******************/
	/* Function: 0x3e */

	WERROR PNP_GetVersionInternal();

	/******************/
	/* Function: 0x3f */

	WERROR PNP_GetBlockedDriverInfo();

	/******************/
	/* Function: 0x40 */

	WERROR PNP_GetServerSideDeviceInstallFlags();
}