BCB_FANS(四大名捕之追杀令):
你看W2K的磁盘管理就知道了
这个是有确定值的,不像你说的那样 hjd_cw() :
谢谢,请发给我吧 [email protected]

解决方案 »

  1.   

    BCB_FANS(四大名捕之追杀令) :
    和主不主分区没有关系的啊
    Win2000/控制面版/管理工具/计算机管理/磁盘管理
    请看这个
    “磁盘0”
    “磁盘1”Windows肯定知道某个逻辑盘是在哪个物理盘上另外在W2K以上的系统里逻辑盘符是可以设置的,这个你知道吗?
    D:可以改成Z:
    按照你的方法根本行不通呀
      

  2.   

    这个贴子,微软的人在上面提到了一点:
    http://groups.google.com/groups?hl=zh-CN&lr=&ie=UTF-8&inlang=zh-CN&threadm=0AQmrrz2BHA.1512%40cpmsftngxa09&rnum=2&prev=/groups%3Fq%3DIOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS%26hl%3Dzh-CN%26lr%3D%26ie%3DUTF-8%26inlang%3Dzh-CN%26sa%3DN%26tab%3Dwg
      

  3.   

    Sorry,我倒没有想到W2K以上的逻辑盘可以更改盘符,刚才试了一下,的确可以改,这个问题有待研究!
      

  4.   

    看了你提供的那个URL,还真复杂!
      

  5.   

    呵呵,你提供的那篇文章已经说得很清楚了,我用C++Builder实现了一下。  AnsiString DiskNumberStr;
      HANDLE hFile;
      DWORD dwByteReturn;
      STORAGE_DEVICE_NUMBER StgDevNum;  //"F"是分区符号,你想查哪个分区对应的物理盘序号,就传哪个分区
      DiskNumberStr = "\\\\.\\F:";
      hFile = CreateFile(DiskNumberStr.c_str(),GENERIC_READ | GENERIC_WRITE,
                         FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
                         OPEN_EXISTING, 0, NULL);
      if(hFile == NULL)
      {
        Memo1->Lines->Add("Error Create File. Err = " + SysErrorMessage(GetLastError()));
        return;
      }   if(DeviceIoControl(hFile,IOCTL_STORAGE_GET_DEVICE_NUMBER,NULL,0,&StgDevNum,
          sizeof(STORAGE_DEVICE_NUMBER),&dwByteReturn,NULL))
       {
         Memo1->Lines->Add("DeviceType = " + IntToStr(StgDevNum.DeviceType));
         Memo1->Lines->Add("DeviceNumber = " + IntToStr(StgDevNum.DeviceNumber));
         Memo1->Lines->Add("PartitionNumber = " + IntToStr(StgDevNum.PartitionNumber));
       }
       else
       {
         Memo1->Lines->Add("Error Call DeviceIoControl. Err = " + SysErrorMessage(GetLastError()));
       }
       CloseHandle(hFile);以上面例子为例,结果如下(我的平台:Windows 2000 SP3):DeviceType = 7 (硬盘,FILE_DEVICE_DISK)
    DeviceNumber = 0 (第一个物理硬盘)
    PartitionNumber = 4 (第四个分区)我这里没有两个硬盘,没法帮你测试有多个硬盘的情况了,抱歉。
      

  6.   

    就算在2000中使用重新定义的盘符作为参数也应该可以得到结果。我把H:盘重新定义为W:盘,结果是:
    DiskNumberStr = "\\\\.\\W:";.........DeviceType = 7 (硬盘,FILE_DEVICE_DISK)
    DeviceNumber = 0 (第一个物理硬盘)
    PartitionNumber = 6 (第四个分区)
      

  7.   

    hjd_cw() :
    你好,你的代码我已收到,不过刚才看了BCB_FANS(四大名捕之追杀令)的代码比较简单,我先试了他的并已通过,我就不再试你的了。
    当然还是谢谢你,这个贴子的200分就给你吧。BCB_FANS(四大名捕之追杀令):
    你好,你的代码我已试过,结果是正确的。
    我在VC和ASM栏里还有两个一样的贴子,我会另外再在Delphi栏里开3个200分的贴子,请你来拿分 ^________^