1.請問IOCTL控制碼該怎麼射設定?為何不用 #define 而是用CTL_CODE()?
2.CTL_CODE( DeviceType, Function, Method, Access )中的DeviceType,Function (假設是ide介面)怎麼定意?http://topic.csdn.net/t/20041026/14/3492286.html  //   IOCTL控制碼  
  //   #define   DFP_SEND_DRIVE_COMMAND       0x0007c084  
  #define     DFP_SEND_DRIVE_COMMAND       CTL_CODE(IOCTL_DISK_BASE,   0x0021,   METHOD_BUFFERED,   FILE_READ_ACCESS   |   FILE_WRITE_ACCESS)  
  //   #define   DFP_RECEIVE_DRIVE_DATA       0x0007c088  
  #define     DFP_RECEIVE_DRIVE_DATA       CTL_CODE(IOCTL_DISK_BASE,   0x0022,   METHOD_BUFFERED,   FILE_READ_ACCESS   |   FILE_WRITE_ACCESS)  
   
  #define     FILE_DEVICE_SCSI                   0x0000001b  
  #define     IOCTL_SCSI_MINIPORT_IDENTIFY             ((FILE_DEVICE_SCSI   <<   16)   +   0x0501)  
  #define     IOCTL_SCSI_MINIPORT   0x0004D008     //     see   NTDDSCSI.H   for   definition  

解决方案 »

  1.   

    1、用#define也可以,用CTL_CODE只是为了把DeviceType、Function、Method、Access分离开,更方便看。
    2、DeviceType是设备类型,作业系统定义了一些设备类型,驱动程式创建设备的时候需要指定创建的是哪种类型的设备,不是按介面来分的。硬碟是FILE_DEVICE_DISK类型(7),CD光碟机是FILE_DEVICE_CD_ROM类型(2),DVD光碟机是FILE_DEVICE_DVD(0x33)。Function是功能代号,是作业系统或者驱动程式定义的。
      

  2.   

    請問 Function(功能代號)要如何得知?
      

  3.   

    对于系统定义的控制码,在SDK和DDK的头文件中有一些的定义,还有很多是未公开的,可以在网上搜索相关内容。
      

  4.   

    請問一下:
    1.我用DeviceIoControl 發命令給IDE時,怎麼知道它命令是送給IDE0 還是IDE1 呢? 
    2.用DeviceIoControl 發0xec 的命令後,我們所得的硬盤的詳細信息 是從哪裡得到的? BIOS or DISK?