[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
This commit is contained in:
Eric Kohl 2011-05-13 15:15:40 +00:00
parent 71fffa95de
commit 7db0796ea8

View 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);