Don't terminate a cpp_quote statement with a semicolon. New versions of WIDL will...
[reactos.git] / reactos / include / reactos / idl / pnp.idl
index eae1cc0..6a9a6c9 100644 (file)
-/*\r
- * Plug and Play Manager RPC interface definition\r
- */\r
-\r
-#define WORD unsigned short\r
-#define DWORD unsigned long\r
-#define ULONG unsigned long\r
-#define CONFIGRET unsigned long\r
-#define BOOL unsigned long\r
-#define PBOOL unsigned long *\r
-\r
-[\r
-  uuid (809F4e40-A03D-11CE-8F69-08003E30051B),\r
-  version(1.0),\r
-  pointer_default(unique)\r
-  #ifndef __midl\r
-  ,explicit_handle\r
-  #endif\r
-]\r
-interface pnp\r
-{\r
-    /* Function 0 */\r
-//    CONFIGRET PNP_Unknown0(handle_t BindingHandle);\r
-\r
-    /* Function 1 */\r
-//    CONFIGRET PNP_Unknown1(handle_t BindingHandle);\r
-\r
-    /* Function 2 */\r
-    CONFIGRET PNP_GetVersion(handle_t BindingHandle,\r
-                             [out] WORD *Version);\r
-\r
-    /* Function 3 */\r
-    CONFIGRET PNP_GetGlobalState(handle_t BindingHandle,\r
-                                 [out] unsigned long *State,\r
-                                 [in] unsigned long Flags);\r
-\r
-    /* Function 4 */\r
-    CONFIGRET PNP_InitDetection(handle_t BindingHandle);\r
-\r
-    /* Function 5 */\r
-    CONFIGRET PNP_ReportLogOn(handle_t BindingHandle,\r
-                              [in] BOOL Admin,\r
-                              [in] DWORD ProcessId);\r
-\r
-    /* Function 6 */\r
-    CONFIGRET PNP_ValidateDeviceInstance(handle_t BindingHandle,\r
-                                         [in, string] wchar_t *DeviceInstance,\r
-                                         [in] DWORD Flags);\r
-\r
-    /* Function 7 */\r
-    CONFIGRET PNP_GetRootDeviceInstance(handle_t BindingHandle,\r
-                                        [out, string, size_is(Length)] wchar_t *DeviceInstance,\r
-                                        [in] DWORD Length);\r
-\r
-    /* Function 8 */\r
-    cpp_quote("#define PNP_DEVICE_PARENT  1")\r
-    cpp_quote("#define PNP_DEVICE_CHILD   2")\r
-    cpp_quote("#define PNP_DEVICE_SIBLING 3")\r
-    CONFIGRET PNP_GetRelatedDeviceInstance(handle_t BindingHandle,\r
-                                           [in] DWORD Relationship,\r
-                                           [in, string] wchar_t *DeviceId,\r
-                                           [out, string, size_is(Length)] wchar_t *RelatedDeviceId,\r
-                                           [in] DWORD Length,\r
-                                           [in] DWORD Flags);\r
-\r
-    /* Function 9 */\r
-    cpp_quote("#define PNP_BRANCH_ENUM  1")\r
-    cpp_quote("#define PNP_BRANCH_CLASS 2")\r
-    CONFIGRET PNP_EnumerateSubKeys(handle_t BindingHandle,\r
-                                   [in] unsigned long Branch,\r
-                                   [in] unsigned long Index,\r
-                                   [out, string, size_is(Length)] wchar_t *Buffer,\r
-                                   [in] unsigned long Length,\r
-                                   [out] unsigned long *RequiredLength,\r
-                                   [in] DWORD Flags);\r
-\r
-    /* Function 10 */\r
-//    CONFIGRET PNP_GetDeviceList(handle_t BindingHandle,\r
-//                                [in, unique, string] wchar_t *Filter,\r
-//                                [out, string, size_is(*Length)] unsigned char *Buffer\r
-//                                [in, out] unsigned long *Length,\r
-//                                [in] DWORD Flags);\r
-\r
-    /* Function 11 */\r
-    CONFIGRET PNP_GetDeviceListSize(handle_t BindingHandle,\r
-                                    [in, unique, string] wchar_t *Filter,\r
-                                    [out] unsigned long *Length,\r
-                                    [in] DWORD Flags);\r
-\r
-    /* Function 12 */\r
-    CONFIGRET PNP_GetDepth(handle_t BindingHandle,\r
-                           [in, string] wchar_t *DeviceInstance,\r
-                           [out] unsigned long *Depth,\r
-                           [in] DWORD Flags);\r
-\r
-    /* Function 13 */\r
-    CONFIGRET PNP_GetDeviceRegProp(handle_t BindingHandle,\r
-                                   [in, string] wchar_t *DeviceInstance,\r
-                                   [in] unsigned long Property,\r
-                                   [in, out] unsigned long *DataType,\r
-                                   [out, size_is(*TransferLen)] char *Buffer,\r
-                                   [in, out] unsigned long *TransferLen,\r
-                                   [in, out] unsigned long *Length,\r
-                                   [in] DWORD Flags);\r
-\r
-    /* Function 14 */\r
-    CONFIGRET PNP_SetDeviceRegProp(handle_t BindingHandle,\r
-                                   [in, string] wchar_t *DeviceId,\r
-                                   [in] unsigned long Property,\r
-                                   [in] unsigned long DataType,\r
-                                   [in, size_is(Length)] char *Buffer,\r
-                                   [in] unsigned long Length,\r
-                                   [in] unsigned long Flags);\r
-\r
-    /* Function 15 */\r
-    CONFIGRET PNP_GetClassInstance(handle_t BindingHandle,\r
-                                   [in, string] wchar_t *DeviceId,\r
-                                   [out, string, size_is(Length)] wchar_t *Buffer,\r
-                                   [in] unsigned long Length);\r
-\r
-    /* Function 16 */\r
-    CONFIGRET PNP_CreateKey(handle_t BindingHandle,\r
-                            [in, string] wchar_t *SubKey,\r
-                            [in] unsigned long DesiredAccess,\r
-                            [in] unsigned long Flags);\r
-\r
-    /* Function 17 */\r
-    CONFIGRET PNP_DeleteRegistryKey(handle_t BindingHandle,\r
-                                    [in, string] wchar_t *DeviceId,\r
-                                    [in, string] wchar_t *ParentKey,\r
-                                    [in, string] wchar_t *ChildKey,\r
-                                    [in] unsigned long Flags);\r
-\r
-    /* Function 19 */\r
-    CONFIGRET PNP_GetClassName(handle_t BindingHandle,\r
-                               [in, string] wchar_t *ClassGuid,\r
-                               [out, string, size_is(*Length)] wchar_t *Buffer,\r
-                               [in, out] unsigned long *Length,\r
-                               [in] unsigned long Flags);\r
-\r
-    /* Function 20 */\r
-    CONFIGRET PNP_DeleteClassKey(handle_t BindingHandle,\r
-                                 [in, string] wchar_t *ClassGuid,\r
-                                 [in] unsigned long Flags);\r
-\r
-    /* Function 28 */\r
-    CONFIGRET PNP_CreateDevInst(handle_t BindingHandle,\r
-                                [in, out, string, size_is(Length)] wchar_t *DeviceId,\r
-                                [in, string] wchar_t *ParentDeviceId,\r
-                                [in] unsigned long Length,\r
-                                [in] unsigned long Flags);\r
-\r
-    /* Function 29 */\r
-    CONFIGRET PNP_DeviceInstanceAction(handle_t BindingHandle,\r
-                                       [in] unsigned long MajorAction,\r
-                                       [in] unsigned long MinorAction,\r
-                                       [in, unique, string] wchar_t *DeviceInstance1,\r
-                                       [in, unique, string] wchar_t *DeviceInstance2);\r
-\r
-    /* Function 30 */\r
-    CONFIGRET PNP_GetDeviceStatus(handle_t BindingHandle,\r
-                                  [in, string] wchar_t *DeviceInstance,\r
-                                  [out] unsigned long *Status,\r
-                                  [out] unsigned long *Problem,\r
-                                  [in] DWORD Flags);\r
-\r
-    /* Function 31 */\r
-    CONFIGRET PNP_SetDeviceProblem(handle_t BindingHandle,\r
-                                   [in, string] wchar_t *DeviceInstance,\r
-                                   [in] unsigned long Problem,\r
-                                   [in] DWORD Flags);\r
-\r
-    /* Function 33 */\r
-    CONFIGRET PNP_UninstallDevInst(handle_t BindingHandle,\r
-                                   [in, string] wchar_t *DeviceInstance,\r
-                                   [in] DWORD Flags);\r
-\r
-    /* Function 34 */\r
-    CONFIGRET PNP_AddID(handle_t BindingHandle,\r
-                        [in, string, unique] wchar_t *DeviceInstance,\r
-                        [in, string] wchar_t *DeviceId,\r
-                        [in] DWORD Flags);\r
-\r
-    /* Function 38 */\r
-    CONFIGRET PNP_IsDockStationPresent(handle_t BindingHandle,\r
-                                       [out]PBOOL Present);\r
-\r
-    /* Function 39 */\r
-    CONFIGRET PNP_RequestEjectPC(handle_t BindingHandle);\r
-\r
-    /* Function 40 */\r
-    cpp_quote("#define PNP_SET_HW_PROFILE_FLAGS  0")\r
-    cpp_quote("#define PNP_GET_HW_PROFILE_FLAGS  1")\r
-    CONFIGRET PNP_HwProfFlags(handle_t BindingHandle,\r
-                              [in] DWORD Action,\r
-                              [in, string] wchar_t *DeviceId,\r
-                              [in] DWORD ProfileId,\r
-                              [in, out] unsigned long *Value,\r
-                              [in] DWORD Flags);\r
-\r
-    /* Function 42 */\r
-    CONFIGRET PNP_AddEmptyLogConf(handle_t BindingHandle,\r
-                                  [in, string] wchar_t *DeviceInstance,\r
-                                  [in] ULONG ulPriority,\r
-                                  [out] ULONG *pulLogConfTag,\r
-                                  [in] ULONG ulFlags);\r
-\r
-    /* Function 43 */\r
-    CONFIGRET PNP_FreeLogConf(handle_t BindingHandle,\r
-                              [in, string] wchar_t *DeviceInstance,\r
-                              [in] ULONG ulType,\r
-                              [in] ULONG ulLogConfTag,\r
-                              [in] ULONG ulFlags);\r
-\r
-    /* Function 44 */\r
-    CONFIGRET PNP_GetFirstLogConf(handle_t BindingHandle,\r
-                                  [in, string] wchar_t *DeviceInstance,\r
-                                  [in] ULONG ulPriority,\r
-                                  [out] ULONG *pulLogConfTag,\r
-                                  [in] ULONG ulFlags);\r
-\r
-    /* Function 45 */\r
-    CONFIGRET PNP_GetNextLogConf(handle_t BindingHandle,\r
-                                 [in, string] wchar_t *DeviceInstance,\r
-                                 [in] ULONG ulLogConfType,\r
-                                 [in] ULONG ulCurrentTag,\r
-                                 [out] ULONG *pulNextTag,\r
-                                 [in] ULONG ulFlags);\r
-\r
-    /* Function 58 */\r
-    CONFIGRET PNP_RunDetection(handle_t BindingHandle,\r
-                               [in] unsigned long Flags);\r
-}\r
+/*
+ * Plug and Play Manager RPC interface definition
+ */
+
+#include "include/reactos/idl/wtypes.idl"
+
+const unsigned long PNP_MAX_STRING_LEN = 32767;
+const unsigned long PNP_MAX_DEVICE_ID_LEN = 200;
+const unsigned long PNP_MAX_GUID_STRING_LEN = 39;
+const unsigned long PNP_MAX_DEVINTERFACE_LEN = PNP_MAX_STRING_LEN;
+const unsigned long PNP_MAX_CULTURE_NAME_LEN = 85;
+const unsigned long PNP_MAX_CM_PATH = 360;
+const unsigned long PNP_MAX_PROP_SIZE = 65534;
+const unsigned long PNP_MAX_PROP_COUNT = 32767;
+const unsigned long PNP_MAX_BUFFER_SIZE = 16000000;
+
+typedef unsigned long RESOURCEID;
+typedef unsigned long DEVPROPTYPE;
+typedef [range(0, PNP_MAX_PROP_SIZE)] unsigned long PNP_PROP_SIZE, *PPNP_PROP_SIZE;
+typedef [range(0, PNP_MAX_PROP_COUNT)] unsigned long PNP_PROP_COUNT, *PPNP_PROP_COUNT;
+typedef [range(0, PNP_MAX_STRING_LEN)] unsigned long PNP_RPC_STRING_LEN, *PPNP_RPC_STRING_LEN;
+typedef [range(0, PNP_MAX_BUFFER_SIZE)] unsigned long PNP_RPC_BUFFER_SIZE, *PPNP_RPC_BUFFER_SIZE;
+
+cpp_quote("#ifndef _CFG_INCLUDED_")
+
+typedef enum _PNP_VETO_TYPE {
+    PNP_VetoTypeUnknown = 0,
+    PNP_VetoLegacyDevice = 1,
+    PNP_VetoPendingClose = 2,
+    PNP_VetoWindowsApp = 3,
+    PNP_VetoWindowsService = 4,
+    PNP_VetoOutstandingOpen = 5,
+    PNP_VetoDevice = 6,
+    PNP_VetoDriver = 7,
+    PNP_VetoIllegalDeviceRequest = 8,
+    PNP_VetoInsufficientPower = 9,
+    PNP_VetoNonDisableable = 10,
+    PNP_VetoLegacyDriver = 11,
+    PNP_VetoInsufficientRights = 12,
+} *PPNP_VETO_TYPE;
+
+cpp_quote("#endif")
+
+cpp_quote("#if 0")
+
+typedef struct _BUSNUMBER_DES {
+    DWORD BUSD_Count;
+    DWORD BUSD_Type;
+    DWORD BUSD_Flags;
+    DWORD BUSD_Alloc_Base;
+    DWORD BUSD_Alloc_End;
+} BUSNUMBER_DES, *PBUSNUMBER_DES;
+
+typedef struct _BUSNUMBER_RANGE {
+    DWORD BUSR_Min;
+    DWORD BUSR_Max;
+    DWORD BUSR_nBusNumbers;
+    DWORD BUSR_Flags;
+} BUSNUMBER_RANGE, *PBUSNUMBER_RANGE;
+
+typedef struct _BUSNUMBER_RESOURCE {
+    BUSNUMBER_DES BusNumber_Header;
+    BUSNUMBER_RANGE BusNumber_Data[1];
+} BUSNUMBER_RESOURCE, *PBUSNUMBER_RESOURCE;
+
+typedef struct _CS_DES {
+    DWORD CSD_SignatureLength;
+    DWORD CSD_LegacyDataOffset;
+    DWORD CSD_LegacyDataSize;
+    DWORD CSD_Flags;
+    GUID CSD_ClassGuid;
+    BYTE CSD_Signature[1];
+} CS_DES, *PCS_DES;
+
+typedef struct _CS_RESOURCE {
+    CS_DES CS_Header;
+} CS_RESOURCE, *PCS_RESOURCE;
+
+typedef struct _DEVPRIVATE_DES {
+    DWORD PD_Count;
+    DWORD PD_Type;
+    DWORD PD_Data1;
+    DWORD PD_Data2;
+    DWORD PD_Data3;
+    DWORD PD_Flags;
+} DEVPRIVATE_DES, *PDEVPRIVATE_DES;
+
+typedef struct _DEVPRIVATE_RANGE {
+    DWORD PR_Data1;
+    DWORD PR_Data2;
+    DWORD PR_Data3;
+} DEVPRIVATE_RANGE, *PDEVPRIVATE_RANGE;
+
+typedef struct _DEVPRIVATE_RESOURCE {
+    DEVPRIVATE_DES PRV_Header;
+    DEVPRIVATE_RANGE PRV_Data[1];
+} DEVPRIVATE_RESOURCE, *PDEVPRIVATE_RESOURCE;
+
+typedef struct _DMA_DES {
+    DWORD DD_Count;
+    DWORD DD_Type;
+    DWORD DD_Flags;
+    unsigned long DD_Alloc_Chan;
+} DMA_DES, *PDMA_DES;
+
+typedef struct _DMA_RANGE {
+    DWORD DR_Min;
+    DWORD DR_Max;
+    DWORD DR_Flags;
+} DMA_RANGE, *PDMA_RANGE;
+
+typedef struct _DMA_RESOURCE {
+    DMA_DES DMA_Header;
+    DMA_RANGE DMA_Data[1];
+} DMA_RESOURCE, *PDMA_RESOURCE;
+
+typedef struct _IO_DES {
+    DWORD IOD_Count;
+    DWORD IOD_Type;
+    unsigned __int64 IOD_AllocBase;
+    unsigned __int64 IOD_AllocEnd;
+    DWORD IOD_DesFlags;
+} IO_DES, *PIO_DES;
+
+typedef struct _IO_RANGE {
+    unsigned __int64 IOR_Align;
+    DWORD IOR_nPorts;
+    unsigned __int64 IOR_Min;
+    unsigned __int64 IOR_Max;
+    DWORD IOR_RangeFlags;
+    unsigned __int64 IOR_Alias;
+} IO_RANGE, *PIO_RANGE;
+
+typedef struct _IO_RESOURCE {
+    IO_DES IO_Header;
+    IO_RANGE IO_Data[1];
+} IO_RESOURCE, *PIO_RESOURCE;
+
+typedef struct _IRQ_DES {
+    DWORD IRQD_Count;
+    DWORD IRQD_Type;
+    DWORD IRQD_Flags;
+    DWORD IRQD_Alloc_Num;
+    DWORD IRQD_Affinity;
+} IRQ_DES, *PIRQ_DES;
+
+typedef struct _IRQ_RANGE {
+    DWORD IRQR_Min;
+    DWORD IRQR_Max;
+    DWORD IRQR_Flags;
+} IRQ_RANGE, *PIRQ_RANGE;
+
+typedef struct _IRQ_RESOURCE {
+    IRQ_DES IO_Header;
+    IRQ_RANGE IO_Data[1];
+} IRQ_RESOURCE, *PIRQ_RESOURCE;
+
+typedef struct _MEM_DES {
+    DWORD MD_Count;
+    DWORD MD_Type;
+    unsigned __int64 MD_Alloc_Base;
+    unsigned __int64 MD_Alloc_End;
+    DWORD MD_Flags;
+    DWORD Reserved;
+} MEM_DES, *PMEM_DES;
+
+typedef struct _MEM_RANGE {
+    __int64 MR_Align;
+    DWORD MR_nBytes;
+    __int64 MR_Min;
+    __int64 MR_Max;
+    DWORD MR_Flags;
+    DWORD MR_Reserved;
+} MEM_RANGE, *PMEM_RANGE;
+
+typedef struct _MEM_RESOURCE {
+    MEM_DES MEM_Header;
+    MEM_RANGE MEM_Data[1];
+} MEM_RESOURCE, *PMEM_RESOURCE;
+
+typedef struct _MFCARD_DES {
+    DWORD PMF_Count;
+    DWORD PMF_Type;
+    DWORD PMF_Flags;
+    BYTE PMF_ConfigOptions;
+    BYTE PMF_IoResourceIndex;
+    BYTE PMF_Reserved[2];
+    DWORD PMF_ConfigRegisterBase;
+} MFCARD_DES, *PMFCARD_DES;
+
+typedef struct _MFCARD_RESOURCE {
+    MFCARD_DES MfCard_Header;
+} MFCARD_RESOURCE, *PMFCARD_RESOURCE;
+
+typedef struct _PCCARD_DES {
+    DWORD PCD_Count;
+    DWORD PCD_Type;
+    DWORD PCD_Flags;
+    BYTE PCD_ConfigIndex;
+    BYTE PCD_Reserved[3];
+    DWORD PCD_MemoryCardBase1;
+    DWORD PCD_MemoryCardBase2;
+} PCCARD_DES, *PPCCARD_DES;
+
+typedef struct _PCCARD_RESOURCE {
+    PCCARD_DES PcCard_Header;
+} PCCARD_RESOURCE, *PPCARD_RESOURCE;
+
+cpp_quote("#endif")
+
+typedef struct _PNP_CONFLICT_ENTRY {
+    DWORD DeviceInstance;
+    DWORD DeviceFlags;
+    DWORD ResourceType;
+    __int64 ResourceStart;
+    __int64 ResourceEnd;
+    DWORD ResourceFlags;
+} PNP_CONFLICT_ENTRY, *PPNP_CONFLICT_ENTRY;
+
+typedef struct _PNP_CONFLICT_LIST {
+    DWORD Reserved1;
+    DWORD Reserved2;
+    DWORD ConflictsCounted;
+    DWORD ConflictsListed;
+    DWORD RequiredBufferSize;
+    PNP_CONFLICT_ENTRY ConflictEntry[1];
+} PNP_CONFLICT_LIST, *PPNP_CONFLICT_LIST;
+
+typedef struct _PNP_CONFLICT_STRINGS {
+    DWORD NullDeviceInstance;
+    WCHAR DeviceInstanceStrings[1];
+} PNP_CONFLICT_STRINGS, *PPNP_CONFLICT_STRINGS;
+
+typedef struct _DEVPROPKEY {
+    GUID fmtid;
+    DWORD pid;
+} DEVPROPKEY;
+
+typedef struct _HWPROFILEINFO {
+    DWORD HWPI_ulHWProfile;
+    WCHAR HWPI_szFriendlyName[80];
+    DWORD HWPI_dwFlags;
+} HWPROFILEINFO;
+
+[
+  uuid (809F4e40-A03D-11CE-8F69-08003E30051B),
+  version(1.0),
+  pointer_default(unique)
+  #ifndef __midl
+  ,explicit_handle
+  #endif
+]
+interface pnp
+{
+    /* Function 0 */
+    DWORD PNP_Function0(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 1 */
+    DWORD PNP_Function1(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 2 */
+    DWORD PNP_GetVersion(
+        [in] handle_t hBinding,
+        [out] WORD *pVersion);
+
+    /* Function 3 */
+    DWORD PNP_GetGlobalState(
+        [in] handle_t hBinding,
+        [out] DWORD *pulState,
+        [in] DWORD ulFlags);
+
+    /* Function 4 */
+    DWORD PNP_InitDetection(
+        [in] handle_t hBinding);
+
+    /* Function 5 */
+    DWORD PNP_ReportLogOn(
+        [in] handle_t hBinding,
+        [in] BOOL Admin,
+        [in] DWORD ProcessId);
+
+    /* Function 6 */
+    DWORD PNP_ValidateDeviceInstance(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulFlags);
+
+    /* Function 7 */
+    DWORD PNP_GetRootDeviceInstance(
+        [in] handle_t hBinding,
+        [out, string, size_is(ulLength)] LPWSTR pDeviceID,
+        [in] PNP_RPC_STRING_LEN ulLength);
+
+    /* Function 8 */
+    cpp_quote("#define PNP_GET_PARENT_DEVICE_INSTANCE  0x1")
+    cpp_quote("#define PNP_GET_CHILD_DEVICE_INSTANCE   0x2")
+    cpp_quote("#define PNP_GET_SIBLING_DEVICE_INSTANCE 0x3")
+    DWORD PNP_GetRelatedDeviceInstance(
+        [in] handle_t hBinding,
+        [in] DWORD ulRelationship,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [out, string, size_is(*pulLength)] LPWSTR pRelatedDeviceId,
+        [in, out] PNP_RPC_STRING_LEN *pulLength,
+        [in] DWORD ulFlags);
+
+    /* Function 9 */
+    cpp_quote("#define PNP_ENUMERATOR_SUBKEYS 0x1")
+    cpp_quote("#define PNP_CLASS_SUBKEYS      0x2")
+    DWORD PNP_EnumerateSubKeys(
+        [in] handle_t hBinding,
+        [in] DWORD ulBranch,
+        [in] DWORD ulIndex,
+        [out, string, size_is(ulLength)] LPWSTR Buffer,
+        [in] PNP_RPC_STRING_LEN ulLength,
+        [out] PNP_RPC_STRING_LEN *pulRequiredLen,
+        [in] DWORD ulFlags);
+
+    /* Function 10 */
+    DWORD PNP_GetDeviceList(
+        [in] handle_t hBinding,
+        [in, string, unique, range(0, PNP_MAX_STRING_LEN)] LPWSTR pszFilter,
+        [out, size_is(*pulLength), length_is(*pulLength)] LPWSTR Buffer,
+        [in, out] PNP_RPC_STRING_LEN *pulLength,
+        [in] DWORD ulFlags);
+
+    /* Function 11 */
+    DWORD PNP_GetDeviceListSize(
+        [in] handle_t hBinding,
+        [in, string, unique, range(0, PNP_MAX_STRING_LEN)] LPWSTR pszFilter,
+        [out] PNP_RPC_BUFFER_SIZE *pulLen,
+        [in] DWORD ulFlags);
+
+    /* Function 12 */
+    DWORD PNP_GetDepth(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszDeviceID,
+        [out] DWORD *pulDepth,
+        [in] DWORD ulFlags);
+
+    /* Function 13 */
+    DWORD PNP_GetDeviceRegProp(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulProperty,
+        [in, out] DWORD *pulRegDataType,
+        [out, size_is(*pulTransferLen), length_is(*pulTransferLen)] BYTE *Buffer,
+        [in, out] PNP_PROP_SIZE *pulTransferLen,
+        [in, out] PNP_PROP_SIZE *pulLength,
+        [in] DWORD ulFlags);
+
+    /* Function 14 */
+    DWORD PNP_SetDeviceRegProp(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceId,
+        [in] DWORD ulProperty,
+        [in] DWORD ulDataType,
+        [in, size_is(ulLength)] BYTE *Buffer,
+        [in] PNP_PROP_SIZE ulLength,
+        [in] DWORD ulFlags);
+
+    /* Function 15 */
+    DWORD PNP_GetClassInstance(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceId,
+        [out, string, size_is(ulLength)] LPWSTR pszClassInstance,
+        [in] PNP_RPC_STRING_LEN ulLength);
+
+    /* Function 16 */
+    DWORD PNP_CreateKey(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_CM_PATH)] LPWSTR pszSubKey,
+        [in] DWORD samDesired,
+        [in] DWORD ulFlags);
+
+    /* Function 17 */
+    DWORD PNP_DeleteRegistryKey(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszDeviceID,
+        [in, string, ref, range(0, PNP_MAX_CM_PATH)] LPWSTR pszParentKey,
+        [in, string, ref, range(0, PNP_MAX_CM_PATH)] LPWSTR pszChildKey,
+        [in] DWORD ulFlags);
+
+    /* Function 18 */
+    DWORD PNP_GetClassCount(
+        [in] handle_t hBinding,
+        [out] DWORD *pulClassCount,
+        [in] DWORD ulFlags);
+
+    /* Function 19 */
+    DWORD PNP_GetClassName(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_GUID_STRING_LEN)] LPWSTR pszClassGuid,
+        [out, string, size_is(*pulLength)] LPWSTR Buffer,
+        [in, out] PNP_RPC_STRING_LEN *pulLength,
+        [in] DWORD ulFlags);
+
+    /* Function 20 */
+    DWORD PNP_DeleteClassKey(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_GUID_STRING_LEN)] LPWSTR pszClassGuid,
+        [in] DWORD ulFlags);
+
+    /* Function 21 */
+    DWORD PNP_GetInterfaceDeviceAlias(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVINTERFACE_LEN)] LPWSTR pszInterfaceDevice,
+        [in] GUID *AliasInterfaceGuid,
+        [out, string, size_is(*pulTransferLen)] LPWSTR pszAliasInterfaceDevice,
+        [in, out] PNP_RPC_STRING_LEN *pulLength,
+        [in, out] PNP_RPC_STRING_LEN *pulTransferLen,
+        [in] DWORD ulFlags);
+
+    /* Function 22 */
+    DWORD PNP_GetInterfaceDeviceList(
+        [in] handle_t hBinding,
+        [in] GUID *InterfaceGuid,
+        [in, string, unique, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszDeviceID,
+        [out, size_is(*pulLength), length_is(*pulLength)] BYTE *Buffer,
+        [in, out] PNP_RPC_BUFFER_SIZE *pulLength,
+        [in] DWORD ulFlags);
+
+    /* Function 23 */
+    DWORD PNP_GetInterfaceDeviceListSize(
+        [in] handle_t hBinding,
+        [out] PNP_RPC_BUFFER_SIZE *pulLen,
+        [in] GUID *InterfaceGuid,
+        [in, string, unique, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszDeviceID,
+        [in] DWORD ulFlags);
+
+    /* Function 24 */
+    DWORD PNP_RegisterDeviceClassAssociation(
+        [in] handle_t hBinding,
+        [in, string, unique, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszDeviceID,
+        [in] GUID *InterfaceGuid,
+        [in, string, unique, range(0, PNP_MAX_STRING_LEN)] LPWSTR pszReference,
+        [out, string, size_is(*pulTransferLen)] LPWSTR pszSymLink,
+        [in, out] PNP_RPC_STRING_LEN *pulLength,
+        [in, out] PNP_RPC_STRING_LEN *pulTransferLen,
+        [in] DWORD ulFlags);
+
+    /* Function 25 */
+    DWORD PNP_UnregisterDeviceClassAssociation(
+        [in] handle_t hBinding,
+        [in, string, unique, range(0, PNP_MAX_DEVINTERFACE_LEN)] LPWSTR pszInterfaceDevice,
+        [in] DWORD ulFlags);
+
+    /* Function 26 */
+    DWORD PNP_GetClassRegProp(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_GUID_STRING_LEN)] LPWSTR pszClassGuid,
+        [in] DWORD ulProperty,
+        [in, out] DWORD *pulRegDataType,
+        [out, size_is(*pulTransferLen), length_is(*pulTransferLen)] BYTE *Buffer,
+        [in, out] PNP_RPC_STRING_LEN *pulTransferLen,
+        [in, out] PNP_RPC_STRING_LEN *pulLength,
+        [in] DWORD ulFlags);
+
+    /* Function 27 */
+    DWORD PNP_SetClassRegProp(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_GUID_STRING_LEN)] LPWSTR *pszClassGuid,
+        [in] DWORD ulProperty,
+        [in] DWORD ulDataType,
+        [in, size_is(ulLength)] BYTE *Buffer,
+        [in] PNP_PROP_SIZE ulLength,
+        [in] DWORD ulFlags);
+
+    /* Function 28 */
+    DWORD PNP_CreateDevInst(
+        [in] handle_t hBinding,
+        [in, out, string, size_is(ulLength)] LPWSTR pszDeviceID,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszParentDeviceID,
+        [in] PNP_RPC_STRING_LEN ulLength,
+        [in] DWORD ulFlags);
+
+    /* Function 29 */
+    DWORD PNP_DeviceInstanceAction(
+        [in] handle_t hBinding,
+        [in] DWORD ulMajorAction,
+        [in] DWORD ulMinorAction,
+        [in, string, unique, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszDeviceInstance1,
+        [in, string, unique, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszDeviceInstance2);
+
+    /* Function 30 */
+    DWORD PNP_GetDeviceStatus(
+        [in] handle_t hBinding,
+        [in, string, unique, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [out] DWORD *pulStatus,
+        [out] DWORD *pulProblem,
+        [in] DWORD ulFlags);
+
+    /* Function 31 */
+    DWORD PNP_SetDeviceProblem(
+        [in] handle_t hBinding,
+        [in, string, unique, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulProblem,
+        [in] DWORD ulFlags);
+
+    /* Function 32 */
+    DWORD PNP_DisableDevInst(
+        [in] handle_t hBinding,
+        [in, string, unique, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in, out, unique] PPNP_VETO_TYPE pVetoType,
+        [in, out, string, unique, size_is(ulNameLength), range(0, PNP_MAX_STRING_LEN)] LPWSTR pszVetoName,
+        /* FIXME: should be [in, out, string, unique, max_is(ulNameLength), range(0, PNP_MAX_STRING_LEN)] LPWSTR pszVetoName, */
+        [in] DWORD ulNameLength,
+        [in] DWORD ulFlags);
+
+    /* Function 33 */
+    DWORD PNP_UninstallDevInst(
+        [in] handle_t hBinding,
+        [in, string, unique, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulFlags);
+
+    /* Function 34 */
+    DWORD PNP_AddID(
+        [in] handle_t hBinding,
+        [in, string, unique, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszDeviceID,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszID,
+        [in] DWORD ulFlags);
+
+    /* Function 35 */
+    DWORD PNP_RegisterDriver(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszDeviceID,
+        [in] DWORD ulFlags);
+
+    /* Function 36 */
+    DWORD PNP_QueryRemove(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszDeviceID,
+        [in, out, unique] PPNP_VETO_TYPE pVetoType,
+        [in, out, string, unique, size_is(ulNameLength), range(0, PNP_MAX_STRING_LEN)] LPWSTR pszVetoName,
+        /* FIXME: should be [in, out, string, unique, max_is(ulNameLength), range(0, PNP_MAX_STRING_LEN)] LPWSTR pszVetoName, */
+        [in] DWORD ulNameLength,
+        [in] DWORD ulFlags);
+
+    /* Function 37 */
+    DWORD PNP_RequestDeviceEject(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pszDeviceID,
+        [in, out, unique] PPNP_VETO_TYPE pVetoType,
+        [in, out, string, unique, size_is(ulNameLength), range(0, PNP_MAX_STRING_LEN)] LPWSTR pszVetoName,
+        /* FIXME: should be [in, out, string, unique, max_is(ulNameLength), range(0, PNP_MAX_STRING_LEN)] LPWSTR pszVetoName, */
+        [in] DWORD ulNameLength,
+        [in] DWORD ulFlags);
+
+    /* Function 38 */
+    DWORD PNP_IsDockStationPresent(
+        [in] handle_t hBinding,
+        [in, out, unique] BOOL *Present);
+
+    /* Function 39 */
+    DWORD PNP_RequestEjectPC(
+        [in] handle_t hBinding);
+
+    /* Function 40 */
+    cpp_quote("#define PNP_GET_HWPROFFLAGS 0x1")
+    cpp_quote("#define PNP_SET_HWPROFFLAGS 0x2")
+    DWORD PNP_HwProfFlags(
+        [in] handle_t hBinding,
+        [in] DWORD ulAction,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulConfig,
+        [in, out] DWORD *pulValue,
+        [in, out, unique] PPNP_VETO_TYPE pVetoType,
+        [in, out, string, unique, size_is(ulNameLength), range(0, PNP_MAX_STRING_LEN)] LPWSTR pszVetoName,
+        /* FIXME: should be [in, out, string, unique, max_is(ulNameLength), range(0, PNP_MAX_STRING_LEN)] LPWSTR pszVetoName, */
+        [in] DWORD ulNameLength,
+        [in] DWORD ulFlags);
+
+    /* Function 41 */
+    DWORD PNP_GetHwProfInfo(
+        [in] handle_t hBinding,
+        [in] DWORD ulIndex,
+        [in, out, ref] HWPROFILEINFO *pHWProfileInfo,
+        [in, range(0, 168)] DWORD ulProfileInfoSize,
+        /* FIXME: should be [in, range(0, sizeof(HWPROFILEINFO))] DWORD ulProfileInfoSize, */
+        [in] DWORD ulFlags);
+
+    /* Function 42 */
+    DWORD PNP_AddEmptyLogConf(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulPriority,
+        [out] DWORD *pulLogConfTag,
+        [in] DWORD ulFlags);
+
+    /* Function 43 */
+    DWORD PNP_FreeLogConf(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulLogConfType,
+        [in] DWORD ulLogConfTag,
+        [in] DWORD ulFlags);
+
+    /* Function 44 */
+    DWORD PNP_GetFirstLogConf(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulLogConfType,
+        [out] DWORD *pulLogConfTag,
+        [in] DWORD ulFlags);
+
+    /* Function 45 */
+    DWORD PNP_GetNextLogConf(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulLogConfType,
+        [in] DWORD ulCurrentTag,
+        [out] DWORD *pulNextTag,
+        [in] DWORD ulFlags);
+
+    /* Function 46 */
+    DWORD PNP_GetLogConfPriority(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulType,
+        [in] DWORD ulTag,
+        [out] DWORD *pPriority,
+        [in] DWORD ulFlags);
+
+    /* Function 47 */
+    DWORD PNP_AddResDes(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulLogConfTag,
+        [in] DWORD ulLogConfType,
+        [in] RESOURCEID ResourceID,
+        [out] DWORD *pulResourceTag,
+        [in, size_is(ResourceLen)] BYTE *ResourceData,
+        [in] PNP_RPC_BUFFER_SIZE ResourceLen,
+        [in] DWORD ulFlags);
+
+    /* Function 48 */
+    DWORD PNP_FreeResDes(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulLogConfTag,
+        [in] DWORD ulLogConfType,
+        [in] RESOURCEID ResourceID,
+        [in] DWORD ulResourceTag,
+        [out] DWORD *pulPreviousResType,
+        [out] DWORD *pulPreviousResTag,
+        [in] DWORD ulFlags);
+
+    /* Function 49 */
+    DWORD PNP_GetNextResDes(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulLogConfTag,
+        [in] DWORD ulLogConfType,
+        [in] RESOURCEID ResourceID,
+        [in] DWORD ulResourceTag,
+        [out] DWORD *pulNextResType,
+        [out] DWORD *pulNextResTag,
+        [in] DWORD ulFlags);
+
+    /* Function 50 */
+    DWORD PNP_GetResDesData(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulLogConfTag,
+        [in] DWORD ulLogConfType,
+        [in] RESOURCEID ResourceID,
+        [in] DWORD ulResourceTag,
+        [out, size_is(BufferLen)] BYTE *Buffer,
+        [in] PNP_RPC_BUFFER_SIZE BufferLen,
+        [in] DWORD ulFlags);
+
+    /* Function 51 */
+    DWORD PNP_GetResDesDataSize(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulLogConfTag,
+        [in] DWORD ulLogConfType,
+        [in] RESOURCEID ResourceID,
+        [in] DWORD ulResourceTag,
+        [out] DWORD *pulSize,
+        [in] DWORD ulFlags);
+
+    /* Function 52 */
+    DWORD PNP_ModifyResDes(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] DWORD ulLogConfTag,
+        [in] DWORD ulLogConfType,
+        [in] RESOURCEID CurrentResourceID,
+        [in] RESOURCEID NewResourceID,
+        [in] DWORD ulResourceTag,
+        [in, size_is(ResourceLen)] BYTE *ResourceData,
+        [in] PNP_RPC_BUFFER_SIZE ResourceLen,
+        [in] DWORD ulFlags);
+
+    /* Function 53 */
+    DWORD PNP_DetectResourceConflict(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] RESOURCEID ResourceID,
+        [in, size_is(ResourceLen)] BYTE *ResourceData,
+        [in] PNP_RPC_BUFFER_SIZE ResourceLen,
+        [out] BOOL *pbConflictDetected,
+        [in] DWORD ulFlags);
+
+    /* Function 54 */
+    DWORD PNP_QueryResConfList(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in] RESOURCEID ResourceID,
+        [in, size_is(ResourceLen)] BYTE *ResourceData,
+        [in] PNP_RPC_BUFFER_SIZE ResourceLen,
+        [out, size_is(BufferLen)] BYTE *Buffer,
+        [in] PNP_RPC_BUFFER_SIZE BufferLen,
+        [in] DWORD ulFlags);
+
+    /* Function 55 */
+    DWORD PNP_Function55(
+        [in] handle_t hBinding);
+
+    /* Function 56 */
+    DWORD PNP_Function56(
+        [in] handle_t hBinding);
+
+    /* Function 57 */
+    DWORD PNP_Function57(
+        [in] handle_t hBinding);
+
+    /* Function 58 */
+    DWORD PNP_RunDetection(
+        [in] handle_t hBinding,
+        [in] DWORD ulFlags);
+
+    /* Function 59 */
+    DWORD PNP_Function59(
+        [in] handle_t hBinding);
+
+    /* Function 60 */
+    DWORD PNP_Function60(
+        [in] handle_t hBinding);
+
+    /* Function 61 */
+    DWORD PNP_GetCustomDevProp(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_DEVICE_ID_LEN)] LPWSTR pDeviceID,
+        [in, string, ref, range(0, PNP_MAX_STRING_LEN)] LPWSTR CustomPropName,
+        [out] DWORD *pulRegDataType,
+        [out, size_is(*pulLength), length_is(*pulTransferLen)] BYTE *Buffer,
+        [out] PNP_RPC_STRING_LEN *pulTransferLen,
+        [in, out] PNP_RPC_STRING_LEN *pulLength,
+        [in] DWORD ulFlags);
+
+    /* Function 62 */
+    DWORD PNP_GetVersionInternal(
+        [in] handle_t hBinding,
+        [in, out] WORD *pwVersion);
+
+    /* Function 63 */
+    DWORD PNP_GetBlockedDriverInfo(
+        [in] handle_t hBinding,
+        [out, size_is(*pulLength), length_is(*pulTransferLen)] BYTE *Buffer,
+        [out] PNP_RPC_BUFFER_SIZE *pulTransferLen,
+        [in, out] PNP_RPC_BUFFER_SIZE *pulLength,
+        [in] DWORD ulFlags);
+
+    /* Function 64 */
+    DWORD PNP_GetServerSideDeviceInstallFlags(
+        [in] handle_t hBinding,
+        [out] DWORD *pulSSDIFlags,
+        [in] DWORD ulFlags);
+
+    /* Function 65 */
+    DWORD PNP_GetObjectPropKeys(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_STRING_LEN)] LPWSTR ObjectName,
+        [in] DWORD ObjectType,
+        [in, string, unique, range(0, PNP_MAX_CULTURE_NAME_LEN)] LPWSTR PropertyCultureName,
+        [in, out] PNP_PROP_COUNT *PropertyCount,
+        [out] PNP_PROP_COUNT *TransferLen,
+        [out, size_is(*PropertyCount), length_is(*TransferLen)] DEVPROPKEY *PropertyKeys,
+        [in] DWORD Flags);
+
+    /* Function 66 */
+    DWORD PNP_GetObjectProp(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_STRING_LEN)] LPWSTR ObjectName,
+        [in] DWORD ObjectType,
+        [in, string, unique, range(0, PNP_MAX_CULTURE_NAME_LEN)] LPWSTR PropertyCultureName,
+        [in] const DEVPROPKEY *PropertyKey,
+        [out] DEVPROPTYPE *PropertyType,
+        [in, out] PNP_PROP_SIZE *PropertySize,
+        [out] PNP_PROP_SIZE *TransferLen,
+        [out, size_is(*PropertySize), length_is(*TransferLen)] BYTE *PropertyBuffer,
+        [in] DWORD Flags);
+
+    /* Function 67 */
+    DWORD PNP_SetObjectProp(
+        [in] handle_t hBinding,
+        [in, string, ref, range(0, PNP_MAX_STRING_LEN)] LPWSTR ObjectName,
+        [in] DWORD ObjectType,
+        [in, string, unique, range(0, PNP_MAX_CULTURE_NAME_LEN)] LPWSTR PropertyCultureName,
+        [in] const DEVPROPKEY *PropertyKey,
+        [in] DEVPROPTYPE PropertyType,
+        [in] PNP_PROP_SIZE PropertySize,
+        [in, unique, size_is(PropertySize)] BYTE *PropertyBuffer,
+        [in] DWORD Flags);
+}