Implement DICS_FLAG_CONFIGSPECIFIC and DIREG_DEV cases in SetupDiCreateDevRegKeyW
[reactos.git] / reactos / lib / setupapi / setupapi_private.h
index b8f366e..86a0a04 100644 (file)
 #include <assert.h>
 #include <fcntl.h>
 #include <share.h>
+#include <wchar.h>
 
 #define WIN32_NO_STATUS
 #include <windows.h>
 #include <cfgmgr32.h>
 #include <fdi.h>
+#include <regstr.h>
 #include <setupapi.h>
 #include <shlobj.h>
 #include <wine/debug.h>
@@ -40,6 +42,7 @@
 #include "resource.h"
 
 #define SETUP_DEV_INFO_SET_MAGIC 0xd00ff057
+#define SETUP_CLASS_IMAGE_LIST_MAGIC 0xd00ff058
 
 struct DeviceInterface /* Element of DeviceInfoElement.InterfaceListHead */
 {
@@ -55,7 +58,7 @@ struct DeviceInterface /* Element of DeviceInfoElement.InterfaceListHead */
      */
     DWORD Flags;
 
-    WCHAR SymbolicLink[0]; /* \\?\ACPI#PNP0501#4&2658d0a0&0#{GUID} */
+    WCHAR SymbolicLink[ANYSIZE_ARRAY]; /* \\?\ACPI#PNP0501#4&2658d0a0&0#{GUID} */
 };
 
 /* We don't want to open the .inf file to read only one information in it, so keep a handle to it once it
@@ -66,7 +69,7 @@ struct InfFileDetails
     LONG References;
 
     /* May contain no directory if the file is already in %SYSTEMROOT%\Inf */
-    WCHAR FullInfFileName[0];
+    WCHAR FullInfFileName[ANYSIZE_ARRAY];
 };
 
 struct DriverInfoElement /* Element of DeviceInfoSet.DriverListHead and DeviceInfoElement.DriverListHead */
@@ -74,6 +77,7 @@ struct DriverInfoElement /* Element of DeviceInfoSet.DriverListHead and DeviceIn
     LIST_ENTRY ListEntry;
 
     DWORD DriverRank;
+    ULARGE_INTEGER DriverDate;
     SP_DRVINFO_DATA_V2_W Info;
     SP_DRVINFO_DETAIL_DATA_W Details;
     GUID ClassGuid;
@@ -81,9 +85,15 @@ struct DriverInfoElement /* Element of DeviceInfoSet.DriverListHead and DeviceIn
     struct InfFileDetails *InfFileDetails;
 };
 
+struct ClassInstallParams
+{
+    PSP_PROPCHANGE_PARAMS PropChange;
+};
+
 struct DeviceInfoElement /* Element of DeviceInfoSet.ListHead */
 {
     LIST_ENTRY ListEntry;
+    DEVINST dnDevInst; /* Used in CM_* functions */
 
     /* Reserved Field points to a struct DriverInfoElement */
     SP_DEVINSTALL_PARAMS_W InstallParams;
@@ -126,7 +136,10 @@ struct DeviceInfoElement /* Element of DeviceInfoSet.ListHead */
     /* List of interfaces implemented by this device */
     LIST_ENTRY InterfaceListHead; /* List of struct DeviceInterface */
 
-    WCHAR Data[0];
+    /* Used by SetupDiGetClassInstallParamsW/SetupDiSetClassInstallParamsW */
+    struct ClassInstallParams ClassInstallParams;
+
+    WCHAR Data[ANYSIZE_ARRAY];
 };
 
 struct DeviceInfoSet /* HDEVINFO */
@@ -143,6 +156,26 @@ struct DeviceInfoSet /* HDEVINFO */
     LIST_ENTRY DriverListHead; /* List of struct DriverInfoElement */
 
     LIST_ENTRY ListHead; /* List of struct DeviceInfoElement */
+
+    /* Used by SetupDiGetClassInstallParamsW/SetupDiSetClassInstallParamsW */
+    struct ClassInstallParams ClassInstallParams;
+
+    /* Contains the name of the remote computer ('\\COMPUTERNAME' for example),
+     * or NULL if related to local machine. Points into szData field at the
+     * end of the structure */
+    PCWSTR MachineName;
+    WCHAR szData[ANYSIZE_ARRAY];
+};
+
+struct ClassImageList
+{
+    DWORD magic; /* SETUP_CLASS_IMAGE_LIST_MAGIC */
+
+    /* Contains the name of the remote computer ('\\COMPUTERNAME' for example),
+     * or NULL if related to local machine. Points into szData field at the
+     * end of the structure */
+    PCWSTR MachineName;
+    WCHAR szData[ANYSIZE_ARRAY];
 };
 
 extern HINSTANCE hInstance;