idaxsy
驱动大牛
驱动大牛
  • 注册日期2004-12-09
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分386分
  • 威望54点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:1284回复:14

请问一下win98的硬盘驱动

楼主#
更多 发布于:2005-04-04 16:51
也就是存储系统,是哪几个vxd文件?
[b]万水千山总是情,回个帖子行不行?[/b]
liuge
驱动牛犊
驱动牛犊
  • 注册日期2004-06-02
  • 最后登录2005-07-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-05 11:39
应该是ESDI_506.PDR和DISKTSD.VXD吧。
idaxsy
驱动大牛
驱动大牛
  • 注册日期2004-12-09
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分386分
  • 威望54点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-06 09:19
原来如此。谢谢!
我现在没有98 ifs,头疼得要命。
[b]万水千山总是情,回个帖子行不行?[/b]
idaxsy
驱动大牛
驱动大牛
  • 注册日期2004-12-09
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分386分
  • 威望54点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-06 09:41
98ddk含有ifs功能 :D
[b]万水千山总是情,回个帖子行不行?[/b]
liuge
驱动牛犊
驱动牛犊
  • 注册日期2004-06-02
  • 最后登录2005-07-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-06 11:47
没错,我给Leopard老兄说的要公开的Win98文件系统驱动就是看了regfsd以后搞的。只是还缺一点东西,没有时间放上去。

另外,有个家伙把我的vdisk下下来说不敢用。说怎么没有用系统线程直接就使用句柄了,难道不怕process context问题?我说,我用了一个OBJ_KERNEL_HANDLE标志打开文件(从NT Insider学来的:P),这样打开的句柄都是系统进程的句柄,所以应该就不用系统线程了。应该是对的,我也试过,不过没测试过。

不知道有没有大侠有空帮我瞅瞅,看看这个做法有没有问题?

 ;)
hongsing
驱动小牛
驱动小牛
  • 注册日期2004-05-22
  • 最后登录2012-04-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-07 15:01
没错,我给Leopard老兄说的要公开的Win98文件系统驱动就是看了regfsd以后搞的。只是还缺一点东西,没有时间放上去。

另外,有个家伙把我的vdisk下下来说不敢用。说怎么没有用系统线程直接就使用句柄了,难道不怕process context问题?我说,我用了一个OBJ_KERNEL_HANDLE标志打开文件(从NT Insider学来的:P),这样打开的句柄都是系统进程的句柄,所以应该就不用系统线程了。应该是对的,我也试过,不过没测试过。

不知道有没有大侠有空帮我瞅瞅,看看这个做法有没有问题?

 ;)

你的 VDISK 在哪里有下?我也在研究这方面:)
liuge
驱动牛犊
驱动牛犊
  • 注册日期2004-06-02
  • 最后登录2005-07-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-07 15:52
比filedisk更简单,网址是http://bcompute.com/rambler/cn/WinDriverDownload.htm。当然,功能也少一些,毕竟是一个演示程序嘛。
hongsing
驱动小牛
驱动小牛
  • 注册日期2004-05-22
  • 最后登录2012-04-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-07 15:59
你的 VDISK 好象和 REGFSD 没什么关系啊:)
我以为是9X下的REGFSD,我用REGFSD改了个驱动,也就是重定向到其他盘上面,真实的文件读写,查找文件没问题,打开文件就蓝屏了:(
liuge
驱动牛犊
驱动牛犊
  • 注册日期2004-06-02
  • 最后登录2005-07-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-04-07 16:44
vdisk是块设备的,不是我说的98 FSD。
打开文件蓝屏了?你得查一查了。:(
反正我用的挺好的。要具体分析一下才知道。
hongsing
驱动小牛
驱动小牛
  • 注册日期2004-05-22
  • 最后登录2012-04-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-04-07 19:30
我是用REGFSD改过来,重定向到另外一个盘,比如 REGFSD 生成的盘是 D 盘,所有读写 D 盘的操作,我都转向到 E 盘,文件显示(FIND 和 FINDNEXT)没问题,当读区大于 512 字节的文件时,就蓝平了,小于512字节的没问题。请教各位朋友,这是个什么问题?
hongsing
驱动小牛
驱动小牛
  • 注册日期2004-05-22
  • 最后登录2012-04-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-04-07 19:33
相关代码如下:
VOID __cdecl RequestHandler(IOP * pIop)
{
PDEVICEPARAMS pDP;
IOR* pIor = &pIop->IOP_ior;
HKEY h;
PCHAR pValue, p;
DWORD pos;
DWORD ValueSize = READBUFSIZE;
CHAR readbuf[READBUFSIZE];
PDEVICEPARAMS pDp;

HANDLE filehwnd;
WORD pError;
CHAR LogBuf[300];
DWORD GetC=0;

// dprintf(\"REGFSD: %s initiated\\tIOP=%x\\n\",
// GetIOFunctionName(pIor->IOR_func), pIop);

pIor->IOR_status = IORS_INVALID_COMMAND; // assume error

switch (pIop->IOP_ior.IOR_func)
{
case IOR_READ:

// The IOP was sent by our HandleRead function. The private convention
// is:
// IOR_start_addr[0] = the Registry key to whose value is to be read
// IOR_start_addr[1] = name of value to read
// IOR_private_port  = file position (byte offset from start of value)

dw2(\"========RequestHandler=======<IOR_READ><1>--\",\"Start\");
//h = (HKEY)pIor->IOR_start_addr[0];
filehwnd = (HANDLE)pIor->IOR_start_addr[0];
pValue = (PCHAR)pIor->IOR_start_addr[1];
pos = pIor->IOR_private_port;
p = readbuf;

// Read the value
sprintf(LogBuf,\"%s: <pos=%d><count=%d>\",pValue,pos,pIor->IOR_xfer_count);
dw2(\"========RequestHandler=======<IOR_READ><2>--\",LogBuf);
//DWORD __cdecl R0_ReadFile(BOOL bInContext, HANDLE h, PVOID buffer,
// DWORD Count, DWORD FileOffset, PWORD pError);

GetC = R0_ReadFile(FALSE,filehwnd,p,pIor->IOR_xfer_count,pos,&pError);
if (pError==0)
{
sprintf(LogBuf,\"Count:<%d>,RDBSIZE:<%d>,pos<%d>,Getc<%d>\",pIor->IOR_xfer_count,READBUFSIZE,pos,GetC);
dw2(\"========RequestHandler=======<READ_ST> <3>--\",LogBuf);

pIor->IOR_status = IORS_SUCCESS;
//pIor->IOR_xfer_count = min(pIor->IOR_xfer_count, READBUFSIZE-pos);
pIor->IOR_xfer_count = min(pIor->IOR_xfer_count, GetC);
memcpy((PVOID)pIor->IOR_buffer_ptr, p+pos, GetC);

sprintf(LogBuf,\"Count:<%d>,RDBSIZE:<%d>,pos<%d>,Getc<%d>\",pIor->IOR_xfer_count,READBUFSIZE,pos,GetC);
dw2(\"========RequestHandler=======<READ_OK> <3>--\",LogBuf);
}
/*if (RegQueryValueEx(h, pValue, NULL,NULL, p, &ValueSize) ==
ERROR_SUCCESS)
{

// If the value is read, then transfer the data to the client buffer

if (pos < READBUFSIZE)
{
pIor->IOR_status = IORS_SUCCESS;
pIor->IOR_xfer_count =
min(pIor->IOR_xfer_count,
   READBUFSIZE-pos);
memcpy((PVOID)pIor->IOR_buffer_ptr, p+pos,
pIor->IOR_xfer_count);
}
}*/

break;

case IOR_GEN_IOCTL:
// dprintf(\"\\tdrive=%c function=%x\\n\", pIor->IOR_ioctl_drive+\'A\',
// pIor->IOR_ioctl_function);

switch (pIor->IOR_ioctl_function)
{
case 0x440D:
// Get Device Parameters

pDp = (PDEVICEPARAMS)pIor->IOR_ioctl_buffer_ptr;

if ( (pIor->IOR_ioctl_control_param & 0xff) == 0x60)
{
IoctlGetDeviceParams(pDp);
pIor->IOR_status = IORS_SUCCESS;
}

break;

}

break;

default:
pIor->IOR_status = IORS_INVALID_COMMAND;
break;
}

// Invoke the completion handler. First pop off the empty entry at the
// top of the stack. Note: IOP_callback_ptr is type as IOP_callback_entry*,
// not ULONG when using VtoolsD.

--pIop->IOP_callback_ptr;
pIop->IOP_callback_ptr->IOP_CB_address(pIop);
}
liuge
驱动牛犊
驱动牛犊
  • 注册日期2004-06-02
  • 最后登录2005-07-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-04-07 20:45
你可以不用IOS_SendCommand调用RequestHandler,而是在HandleRead中直接干活就行了。regfsd多此一举,搞得很复杂,没有必要。

蓝屏的问题是不是重入了,导致堆栈溢出 - 比如你调用系统文件函数时又一次调用了你的处理函数。你写E盘是调用的R0文件函数吧?
hongsing
驱动小牛
驱动小牛
  • 注册日期2004-05-22
  • 最后登录2012-04-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-04-07 23:09
是的,是调用R0文件函数,但是没到写这一步就蓝屏了。调试信息是这样的:
23:46:26 Admin: ========VolOpen=======<True>-- E:\\XPICON.DLL
23:46:26 Admin: ========VolOpen=======  XPICON.DLL 0
23:46:26 Admin: ========VolOpen=======<True>-- Open Success
23:46:26 Admin: ========HandleSeek=======<3>-- FILE_BEGIN,<ir_pos=0>
23:46:26 Admin: ========HandleSeek=======<5>-- End,<ir_pos=0>
23:46:26 Admin: ========RequestHandler=======<IOR_READ><1>-- Start
23:46:26 Admin: ========RequestHandler=======<IOR_READ><2>-- E:\\XPICON.DLL: <pos=0><count=30720>
liuge
驱动牛犊
驱动牛犊
  • 注册日期2004-06-02
  • 最后登录2005-07-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-04-08 13:33
做驱动有一个增量开发的原则,就是先做一个最小的。对了以后,在一点一点把你自己的东西加上去。每对了一次,就马上用SourceSafe或Cvs这样的版本工具做一个Label。这样,就可以查出你的问题来。

建议你先把regfsd扒干净,只留一个空壳。然后一步一步把你的东西加进去,错误就会现出原形了。 :D

regfsd肯定是没问题的,尽管有一个BUG。不过,你还没有做到那里,所以现在是没有问题的。

祝你好运 :)
hongsing
驱动小牛
驱动小牛
  • 注册日期2004-05-22
  • 最后登录2012-04-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-04-08 18:52
谢谢了。
其他没什么问题,就死在读取那个地方,只有暂时搁着了。
游客

返回顶部