为了获得音量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始终返回零,表示为false。
我的代码有什么问题...
最佳答案
这需要一些水晶球咨询。 DevicePath字符串看起来像来自SP_DEVICE_INTERFACE_DETAIL_DATA。这是您不拥有的字符串,对其进行修改最多会破坏内部setupapi数据库,最坏会破坏堆。您必须将字符串复制到自己的缓冲区中,然后再将其转换为根目录名称。
这只是一个理论,尤其是“ loginErrCode”是一个看起来很奇怪的名称。验证最后得到的字符串至少看起来类似于“ F:\”。