TrueCrypt 提供了一种通过驱动获取磁盘设备路径对应盘符的方法,需要依赖TrueCrypt驱动提供的CC_IOCTL_GET_RESOLVED_SYMLINK消息来获取,代码如下
BOOL ResolveSymbolicLink(LPCWSTR wzSymLinkName, PWSTR wzTargetName)
{
BOOL bResult;
DWORD dwBytesReturned;
RESOLVE_SYMLINK_STRUCT rsResolve;
memset(&rsResolve, 0, sizeof(rsResolve));
wcscpy((PWSTR)&rsResolve.SymLinkName, wzSymLinkName);
bResult = DeviceIoControl(g_hDriver, CC_IOCTL_GET_RESOLVED_SYMLINK, &rsResolve, sizeof(rsResolve), &rsResolve, sizeof(rsResolve), &dwBytesReturned, NULL);
wcscpy(wzTargetName, (PWSTR)&rsResolve.TargetName);
return bResult;
}
// Returns drive letter number assigned to device (-1 if none)
int GetDevicePathRealDriveNo(LPCWSTR lpDevicePath)
{
int nDriveNo;
WCHAR wzSymLinkName[CC_LONG_PATH + 1];
WCHAR wzTempTargetName[CC_LONG_PATH + 1];
WCHAR wzTargetName[CC_LONG_PATH + 1];
if (!ResolveSymbolicLink(lpDevicePath, wzTargetName))
{
wcscpy(wzTarge