2010-06-09 150 views
0

要获得卷GUID我试图像下面GetVolumeNameForVolumeMountPoint返回false

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

假设这是您的相关问题的另一个问题,您不能使用USB设备(GUID_DEVINTERFACE_USB_DEVICE)和GetVolumeNameForVolumeMountPoint;该功能仅适用于卷设备(GUID_DEVINTERFACE_VOLUME)。 – Luke 2010-06-09 16:55:33

回答

1

这需要一些水晶球咨询。 DevicePath字符串看起来像来自SP_DEVICE_INTERFACE_DETAIL_DATA。这是一个你不拥有的字符串,修改它会损坏内部的setupapi数据库,最坏的情况是堆。在将其转换为根目录名称之前,必须将该字符串复制到您自己的缓冲区中。

这只是一个理论,特别是“loginErrCode”是代码似乎做的一个很奇怪的名字。验证您最终得到的字符串至少类似于“F:\”。

+0

SP_DEVICE_INTERFACE_DETAIL_DATA由用户提供的缓冲区支持,因此修改它是可以的(只要它足够大)。 – Luke 2010-06-09 16:58:41

+0

好点。好吧,然后堆腐败。 – 2010-06-09 17:39:12