diff options
author | Slawomir Cygan <slawomir.cygan@intel.com> | 2018-01-25 13:48:54 +0100 |
---|---|---|
committer | Lenny Komow <lenny@lunarg.com> | 2018-02-12 13:23:57 -0700 |
commit | 43b42e1ea08a3615510707f94942cbf1efac1957 (patch) | |
tree | 414d67c48a10444e3e12993d41068a7ed856d578 | |
parent | fa472852a07e8497f5e4cb7a766bb927967e6e77 (diff) | |
download | vulkan-validation-layers-43b42e1ea08a3615510707f94942cbf1efac1957.tar.gz |
loader: use Unicode functions from cfgmgr32.lib
This change improves loader compatibility with Universal
Windows drivers[1]: do not use removed ANSI-based functions,
use Unicode equivalentsexposed in umbrella[2] library.
[1] https://docs.microsoft.com/en-us/windows-hardware/drivers/develop/getting-started-with-universal-drivers
[2] https://msdn.microsoft.com/en-us/library/windows/desktop/mt654039(v=vs.85).aspx
Change-Id: I8ead9c46815d15e1b2f2226eb30110c8efa4ec75
-rw-r--r-- | loader/loader.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/loader/loader.c b/loader/loader.c index f1bc58976..543b9657b 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -543,15 +543,15 @@ out: // *reg_data contains a string list of filenames as pointer. // When done using the returned string list, the caller should free the pointer. VkResult loaderGetDeviceRegistryFiles(const struct loader_instance *inst, char **reg_data, PDWORD reg_data_size, LPCTSTR value_name) { - static const char* softwareComponentGUID = "{5c4c3332-344d-483c-8739-259e934c9cc8}"; - static const char* displayGUID = "{4d36e968-e325-11ce-bfc1-08002be10318}"; + static const wchar_t* softwareComponentGUID = L"{5c4c3332-344d-483c-8739-259e934c9cc8}"; + static const wchar_t* displayGUID = L"{4d36e968-e325-11ce-bfc1-08002be10318}"; const ULONG flags = CM_GETIDLIST_FILTER_CLASS | CM_GETIDLIST_FILTER_PRESENT; - char childGuid[MAX_GUID_STRING_LEN + 2]; // +2 for brackets {} + wchar_t childGuid[MAX_GUID_STRING_LEN + 2]; // +2 for brackets {} ULONG childGuidSize = sizeof(childGuid); DEVINST devID = 0, childID = 0; - char *pDeviceNames = NULL; + wchar_t *pDeviceNames = NULL; ULONG deviceNamesSize = 0; VkResult result = VK_SUCCESS; bool found = false; @@ -563,25 +563,25 @@ VkResult loaderGetDeviceRegistryFiles(const struct loader_instance *inst, char * // if after obtaining the DeviceNameSize, new device is added start over do { - CM_Get_Device_ID_List_Size(&deviceNamesSize, displayGUID, flags); + CM_Get_Device_ID_List_SizeW(&deviceNamesSize, displayGUID, flags); if (pDeviceNames != NULL) { loader_instance_heap_free(inst, pDeviceNames); } - pDeviceNames = loader_instance_heap_alloc(inst, deviceNamesSize, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + pDeviceNames = loader_instance_heap_alloc(inst, deviceNamesSize * sizeof(wchar_t), VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); if (pDeviceNames == NULL) { loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, "loaderGetDeviceRegistryFiles: Failed to allocate space for display device names."); result = VK_ERROR_OUT_OF_HOST_MEMORY; return result; } - } while (CM_Get_Device_ID_List(displayGUID, pDeviceNames, deviceNamesSize, flags) == CR_BUFFER_SMALL); - + } while (CM_Get_Device_ID_ListW(displayGUID, pDeviceNames, deviceNamesSize, flags) == CR_BUFFER_SMALL); + if (pDeviceNames) { - for (char *deviceName = pDeviceNames; *deviceName; deviceName += strlen(deviceName) + 1) { - CONFIGRET status = CM_Locate_DevNode(&devID, deviceName, CM_LOCATE_DEVNODE_NORMAL); + for (wchar_t *deviceName = pDeviceNames; *deviceName; deviceName += wcslen(deviceName) + 1) { + CONFIGRET status = CM_Locate_DevNodeW(&devID, deviceName, CM_LOCATE_DEVNODE_NORMAL); if (CR_SUCCESS != status) { loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, "loaderGetRegistryFiles: failed to open DevNode %s", deviceName); @@ -622,13 +622,13 @@ VkResult loaderGetDeviceRegistryFiles(const struct loader_instance *inst, char * } do { - char buffer[MAX_DEVICE_ID_LEN]; - CM_Get_Device_ID(childID, buffer, MAX_DEVICE_ID_LEN, 0); + wchar_t buffer[MAX_DEVICE_ID_LEN]; + CM_Get_Device_IDW(childID, buffer, MAX_DEVICE_ID_LEN, 0); loader_log(inst, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, 0, "loaderGetRegistryFiles: Opening child device %d - %s", childID, buffer); - status = CM_Get_DevNode_Registry_Property(childID, CM_DRP_CLASSGUID, NULL, &childGuid, &childGuidSize, 0); + status = CM_Get_DevNode_Registry_PropertyW(childID, CM_DRP_CLASSGUID, NULL, &childGuid, &childGuidSize, 0); if (status != CR_SUCCESS) { loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, "loaderGetRegistryFiles: unable to obtain GUID for:%d error:%d", childID, status); @@ -637,7 +637,7 @@ VkResult loaderGetDeviceRegistryFiles(const struct loader_instance *inst, char * continue; } - if (strcmp(childGuid, softwareComponentGUID) != 0) { + if (wcscmp(childGuid, softwareComponentGUID) != 0) { loader_log(inst, VK_DEBUG_REPORT_DEBUG_BIT_EXT, 0, "loaderGetRegistryFiles: GUID for %d is not SoftwareComponent skipping", childID); continue; |