怎样自己编程实现增加个虚拟的盘符

zxhread 2005-03-20 10:31:57
怎样自己编程实现增加个虚拟的盘符或增加有盘符的网络硬盘
...全文
237 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiirii 2005-03-23
  • 打赏
  • 举报
回复
function SubstRemove(DriveLetter: Char): Boolean;
var drvno: byte;
Drive,Path: string;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then begin
SetLength(Drive,3);
Drive[1]:=DriveLetter;
Drive[2]:=':';
Drive[3]:=#0;
Path:=SubstQuery(DriveLetter);
Result:=DefineDosDevice(DDD_REMOVE_DEFINITION,PChar(Drive),PChar(Path));
end else begin
drvno:=Ord(UpperCase(DriveLetter)[1])-64;
asm
pushad
push es
xor ebx, ebx
mov bh,1
mov bl,drvno
push 0 //ECX (unused)
push 71AAh
push 2A0010h
call VxDCall
pop es
popad
end;
Result:=SubstQuery(DriveLetter) = '';
end;
end;

function SubstQuery(DriveLetter: Char): string;
var drvno: byte;
buff: array[0..256] of char;
lbuff: array[0..256] of char;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then begin
lbuff[0]:=DriveLetter;
lbuff[1]:=':';
lbuff[2]:=#0;
buff[0]:=#0;
QueryDosDevice(lbuff,buff,256);
Result:=StrPas(buff);
if Copy(Result,1,4) = '\??\' then
Result:=Copy(Result,5,Length(Result))
else
Result:='';
end else begin
drvno:=Ord(UpperCase(DriveLetter)[1])-64;
buff[0]:=#0;
asm
pushad
push es
xor ebx, ebx
mov bh,2
mov bl,drvno
lea edx,buff
push 0 //ECX (unused)
push 71AAh
push 2A0010h
call VxDCall
pop es
popad
end;
Result:=StrPas(buff);
if Result = '' then Exit;
// convert to longfilename
asm
// expand long path
pushad
push ds
push es
xor ebx, ebx
lea esi, buff
lea edi, lbuff
mov ecx,0
mov cl, 2
mov ch, 0
push ECX
push 7160h
push 2A0010h
call VxDCall
pop es
pop ds
popad
end;
Result:=StrPas(lbuff);
end;
end;

end.
aiirii 2005-03-23
  • 打赏
  • 举报
回复
http://www.delfan.com/language/delphi/net/subst.html
模拟DOS命令 - subst 来源:未知
unit Subst;
{
API for work with substitution device (see dos command "subst").
Win 9x/NT/2000/XP compatible
ver. 1.2 Last rev. 25 Feb 2002

Freware with source.

Copyright (c) 2000-2002, SoftLab MIL-TEC Ltd
Web: http://www.softcomplete.com
Email: support@softcomplete.com

THIS SOFTWARE AND THE ACCOMPANYING FILES ARE DISTRIBUTED
"AS IS" AND WITHOUT WARRANTIES AS TO PERFORMANCE OF MERCHANTABILITY OR
ANY OTHER WARRANTIES WHETHER EXPRESSED OR IMPLIED.
NO WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE IS OFFERED.
THE USER MUST ASSUME THE ENTIRE RISK OF USING THE ACCOMPANYING CODE. // 请注意此段文本

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented, you must
not claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation
would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. Original copyright may not be removed or altered from any source
distribution.
}

interface

uses Windows, SysUtils;

function SubstCreate(DriveLetter: Char; const Path: string): Boolean;
// create subst device. Path must be a real folder.

function SubstRemove(DriveLetter: Char): Boolean;
// destroy subst device.

function SubstQuery(DriveLetter: Char): string;
// get Path for subst device.
// return empty string if DriveLetter is not subst-device

implementation

procedure VxDCall; external kernel32 index 1;

function SubstCreate(DriveLetter: Char; const Path: string): Boolean;
var drvno: byte;
buff: array[0..256] of char;
FPath: string;

function AddSlash(const Path: string): string; {??áàa???ì \ ???è íà??}
begin
if (Path = '') or (Path[Length(Path)] <> '\') then Result:=Path+'\'
else Result:=Path;
end;

begin
if Path[Length(Path)] = '\' then
FPath:=Copy(Path,1,Length(Path)-1)
else
FPath:=Path;
if Win32Platform = VER_PLATFORM_WIN32_NT then begin
buff[0]:=DriveLetter;
buff[1]:=':';
buff[2]:=#0;
Result:=DefineDosDevice(0,buff,PChar(Path));
end else begin
FPath:=ExtractShortPathName(FPath);
if FPath <> '' then begin
drvno:=Ord(UpperCase(DriveLetter)[1])-64;
StrPCopy(buff,FPath);
asm
pushad
push es
xor ebx, ebx
mov bh,0
mov bl,drvno
lea edx,buff
push 0 //ECX (unused)
push 71AAh
push 2A0010h
call VxDCall
pop es
popad
end;
end;
Result:=ANSIUpperCase(AddSlash(SubstQuery(DriveLetter))) = ANSIUpperCase(AddSlash(Path));
end;
end;
zxhread 2005-03-23
  • 打赏
  • 举报
回复
1.有没有办法编程实现在 我的电脑 这个下面增加个快捷方式

2.还有就是那里有网络硬盘是用VXD实现的方面的资料.
ly_liuyang 2005-03-23
  • 打赏
  • 举报
回复
Subst或类似的方法

想强大,就是用驱动的方法,如VMWare Disk Mount工具,可以建立Virtual Driver的

http://lysoft.7u7.net
DDGG 2005-03-21
  • 打赏
  • 举报
回复
真正的网络硬盘是用VXD实现的,要做一个虚拟设备驱动程序。
lw549 2005-03-21
  • 打赏
  • 举报
回复
subst实现非常简单,而且速度比映射网络盘的方法快很多
ysai 2005-03-20
  • 打赏
  • 举报
回复
subst z: \\127.0.0.1\c$\windows
zxhread 2005-03-20
  • 打赏
  • 举报
回复
有些网络硬盘安装后在 我的电脑 里会产生一个盘符,是怎样编程实现的呢?
急等。
singun 2005-03-20
  • 打赏
  • 举报
回复
映射网络盘
http://search.csdn.net/Expert/topic/2483/2483810.xml?temp=.5242884

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧