一个使我脑子暴大的问题:请问98系统的盘符,应该如何对应

zzw922 2003-09-17 10:10:38
就是,如果存在多个ide硬盘和,use活动存储介质的时候,
该怎么再把GetLogicalVolume函数返回的盘符名,正确分配至相应的disk和相应的分区,谢谢各位大虾了
...全文
76 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
HPHanhan 2003-09-21
  • 打赏
  • 举报
回复
安装SoftICE Driver Suite 2.6就有VToolsD.那边有的下载我也不知道我也是从同事哪里弄到的.
zzw922 2003-09-21
  • 打赏
  • 举报
回复
好的,谢谢HPHanhan(琥珀寒寒) 了
我再研究一下

zzw922 2003-09-20
  • 打赏
  • 举报
回复
谢谢,HPHanhan(琥珀寒寒)
知道了,但写vxd对我来说还是比较困难
还有,你有那个VtoolsD的有效下载地址吗
真的很感谢

lifengice0706(无) ,你好,这个函数只能顺序返回盘符号
但你知道,很多分区的盘符,并不是顺序排列的,所以这个函数,我用
但还需要其他功能函数配合,
HPHanhan 2003-09-19
  • 打赏
  • 举报
回复
具体怎么我也说不上来。
因为我是在我们公司自己的一个vxd驱动中添加了一个IoControl,没有跟DISKTSD.VXD发生关系。建议你写个Vxd,然后通过发DeviceIoControl给此Vxd。然后在Vxd中通过ISP功能做到你想要做的事情。(看看,安装SoftICE Driver Suite 2.6后VTools\include\dcb.h)

extern ILB my_Ilb;
#define pthisIlb (&my_Ilb)

DWORD OnW32DeviceIoControl(PIOCTLPARAMS pParam)
{
switch(pParam->dioc_IOCtlCode)
{
case DIOC_OPEN:
case DIOC_CLOSEHANDLE:
nResult = DEVIOCTL_NOERROR;
break;

default:
//从INbuffer中取得drive = 3(D:)
ISP_dcb_get dcbGet;
DCB ret;
dcbGet.ISP_g_d_hdr.ISP_func = ISP_GET_DCB;
dcbGet.ISP_g_d_dcb = (ULONG)&ret;
dcbGet.ISP_g_d_drive = drive;
pthisIlb->ILB_service_rtn((PISP)&dcbGet);
//这样根据Physhical DCB就能知道UnitNumber(对应与盘)
//从Logical DCB_comn 中能够知道driveNumber和对应的Partition_start
/* 这是一个链式结构
DCB.Dcb_comn--->first Logical Dcb_comn--->next logical Dcb_comn.....

*/
break;
}
return nResult;
}


lifengice0706 2003-09-19
  • 打赏
  • 举报
回复
windows API:win32_GetLogicDrv(),具体的用法见MSDN!
HPHanhan 2003-09-18
  • 打赏
  • 举报
回复
我也说不上来你到底应该怎么做。
但是我是实现了,建议看看DCB(Device Control block),数据结构。
typedef struct DCB { /* */

DCB_COMMON DCB_cmn;
.....
}
而 DCB_cmn中就有一个Partition_Start,就是此分区的起始LBA。
这些函数是在vxd中调用的。
建议看看 ISP_GET_DCB等等函数:
msdn\windows ddk document\window 98/me\related driver document\window95 document\design guide\storage technology\input and output supervisor reference\structure\isp
zzw922 2003-09-18
  • 打赏
  • 举报
回复
没人知道吗
求问斑竹
zzw922 2003-09-18
  • 打赏
  • 举报
回复
HPHanhan(琥珀寒寒),你好
我找了资料说需要DISKTSD.VXD
但我搜索我的电脑,为什么找不到
zzw922 2003-09-18
  • 打赏
  • 举报
回复
谢谢各位:
AthlonxpX86(一滴水) ,你好,你的函数对USB STORAGE和磁盘无法区别,
Onega() :你好,如你所说,这个函数对98无效

HPHanhan(琥珀寒寒),你好,对你的建议,我会仔细看的,谢谢你
Onega 2003-09-18
  • 打赏
  • 举报
回复
不知道98是否支持
typedef DWORD DEVICE_TYPE ;
typedef struct _STORAGE_DEVICE_NUMBER {
DEVICE_TYPE DeviceType;
ULONG DeviceNumber;
ULONG PartitionNumber;
} STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;

BOOL GetDiskAndPartitionNumbers (char driveLetter, DWORD *diskNumberPtr,
DWORD *partitionNumberPtr)
{//I found this in a message from "Jacob Lorch", dated September 10, 1999:

HANDLE fileHandle;
STORAGE_DEVICE_NUMBER deviceInfo;
DWORD bytesReturned;
char rawDiskName[] = "\\\\.\\C:";

// Open the raw disk

rawDiskName[4] = driveLetter;
fileHandle = CreateFile(rawDiskName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if (fileHandle == INVALID_HANDLE_VALUE) return FALSE;

// Get disk and partition number information using a device control
// request

if (!DeviceIoControl(fileHandle, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL,
0, &deviceInfo, sizeof(deviceInfo), &bytesReturned,
NULL))
return FALSE;
if (bytesReturned != sizeof(deviceInfo))
return FALSE;

// Put values into the passed pointers

*diskNumberPtr = deviceInfo.DeviceNumber;
*partitionNumberPtr = deviceInfo.PartitionNumber;
char msgbuf[128];
sprintf(msgbuf,"%d %d\n", deviceInfo.DeviceNumber, deviceInfo.PartitionNumber);
OutputDebugString(msgbuf);
// Close the handle to the raw disk and return success

CloseHandle(fileHandle);

return TRUE;
}
AthlonxpX86 2003-09-18
  • 打赏
  • 举报
回复
char Buf[128];
char *p;
UINT Type;
GetLogicalDriveStrings(128,Buf);
for(p=Buf;*p;p+=lstrlen(p)+1)
{
Type=GetDriveType(p);
switch(Type)
{
case DRIVE_UNKNOWN: //The drive type cannot be determined.
case DRIVE_NO_ROOT_DIR: //The root directory does not exist.
case DRIVE_REMOVABLE: //The disk can be removed from the drive.
case DRIVE_FIXED: //The disk cannot be removed from the drive.
case DRIVE_REMOTE: //The drive is a remote (network) drive.
case DRIVE_CDROM: //The drive is a CD-ROM drive.
case DRIVE_RAMDISK: //The drive is a RAM disk.
Default:
}

}

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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