// \??\C:\WINDOWS\system32\drivers
//选择的盘是映射盘,需要得出正确的路径
function GetDosPath(path:string):string;
var
DriveChar, Drive: string;
Buf: Array [0..MAX_PATH] of Char;
BufferSize: DWORD;
pathList:TStringList;
begin
Result := path;
if Length(path) < 3 then
Exit;
DriveChar := Copy(path,1,2);
BufferSize := QueryDosDevice(PAnsiChar(DriveChar), Buf, MAX_PATH);
if BufferSize > 0 then
begin
//-2有两个#0 结尾
SetString(Drive, Buf, BufferSize-2);
try
pathList := TStringList.Create;
pathList.Delimiter := '\';
pathList.DelimitedText := Drive;
if pathList.Count > 0 then
if pathList[1] ='Device' then //物理硬盘 \Device\HarddiskVolume1\x86.sys
Exit
else
begin
pathList.Delete(0);
if pathList.Count >0 then
pathList.Delete(0);
Result := pathList.DelimitedText+Copy(path,3,Length(path)-2);
end;
finally
pathList.Free;
end;
end;
end;