From 7db0796ea8dff530e8b05b5f7e225be93a052f17 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Fri, 13 May 2011 15:15:40 +0000 Subject: [PATCH] [SETUPAPI] 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 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index 78709d3532c..b66a0b6dfb9 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -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);