GetVolumeNameForVolumeMountPoint возвращает false - PullRequest
0 голосов
/ 09 июня 2010

Чтобы получить GUID тома, я попробовал код как показано ниже

int len = wcslen( pDetData->DevicePath);  
pDetData->DevicePath[len] = '\\';
pDetData->DevicePath[len+1] = 0;
#define BUFFER_SIZE MAX_PATH
WCHAR volume[BUFFER_SIZE];
BOOL bFlag;
bFlag = GetVolumeNameForVolumeMountPoint( pDetData->DevicePath, volume, BUFFER_SIZE );
int loginErrCode = GetLastError();
printf("loginErrCode: %d\n", loginErrCode);
printf("BFLAG: %d\n", bFlag);

GetLastError () также печатает его как 1. это означает ERROR_INVALID_FUNCTION. BFlag всегда возвращает ноль, что означает ложь.

в чем проблема в моем коде ...

1 Ответ

1 голос
/ 09 июня 2010

Это требует некоторой консультации хрустального шара.Строка DevicePath выглядит так, как будто она взята из SP_DEVICE_INTERFACE_DETAIL_DATA.Это строка, которой вы не владеете, ее изменение в лучшем случае повреждает внутреннюю базу данных setupapi, а в худшем - кучу.Вы должны будете скопировать строку в свой собственный буфер, прежде чем превратить ее в имя корневого каталога.

Это всего лишь теория, особенно «loginErrCode» - очень странное имя для того, что, похоже, делает код.Убедитесь, что строка, в которой вы оказались, по крайней мере, похожа на «F: \».

...