[SETUPAPI]
authorEric Kohl <eric.kohl@reactos.org>
Fri, 13 May 2011 15:15:40 +0000 (15:15 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Fri, 13 May 2011 15:15:40 +0000 (15:15 +0000)
CM_Create_DevNode_ExW: Copy the device id string into a local buffer before passing it to PNP_CreateDevInst because its 2nd argument is an 'in out' string. Using a writable string buffer prevents exceptions in case the device id passed to CM_Create_DevNode_ExW is a string constant.

svn path=/trunk/; revision=51697

reactos/dll/win32/setupapi/cfgmgr.c

index 78709d3..b66a0b6 100644 (file)
@@ -595,8 +595,9 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW(
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpParentDevInst;
     CONFIGRET ret = CR_SUCCESS;
+    WCHAR szLocalDeviceID[MAX_DEVICE_ID_LEN];
 
-    FIXME("%p %s %p %lx %p\n",
+    TRACE("%p %s %p %lx %p\n",
           pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
@@ -605,7 +606,7 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW(
     if (pdnDevInst == NULL)
         return CR_INVALID_POINTER;
 
-    if (pDeviceID == NULL || wcslen(pDeviceID) == 0)
+    if (pDeviceID == NULL || wcslen(pDeviceID) == 0 || wcslen(pDeviceID) >= MAX_DEVICE_ID_LEN)
         return CR_INVALID_DEVICE_ID;
 
     if (dnParent == 0)
@@ -634,10 +635,12 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW(
     if (lpParentDevInst == NULL)
         return CR_INVALID_DEVNODE;
 
+    wcscpy(szLocalDeviceID, pDeviceID);
+
     RpcTryExcept
     {
         ret = PNP_CreateDevInst(BindingHandle,
-                                pDeviceID,
+                                szLocalDeviceID,
                                 lpParentDevInst,
                                 MAX_DEVICE_ID_LEN,
                                 ulFlags);