Subversion Repositories pentevo

Rev

Rev 1134 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #pragma once
  2.  
  3. // some defines from Windows 2000 DDK
  4.  
  5.  
  6. #define IOCTL_KEYBOARD_SET_INDICATORS        CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS)
  7. #define IOCTL_KEYBOARD_QUERY_TYPEMATIC       CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
  8. #define IOCTL_KEYBOARD_QUERY_INDICATORS      CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
  9.  
  10. typedef struct _KEYBOARD_INDICATOR_PARAMETERS {
  11.     USHORT UnitId;              // Unit identifier.
  12.     USHORT LedFlags;            // LED indicator state.
  13. } KEYBOARD_INDICATOR_PARAMETERS, *PKEYBOARD_INDICATOR_PARAMETERS;
  14.  
  15. #define KEYBOARD_CAPS_LOCK_ON     4
  16. #define KEYBOARD_NUM_LOCK_ON      2
  17. #define KEYBOARD_SCROLL_LOCK_ON   1
  18.  
  19.  
  20.  
  21.  
  22.  
  23. #define FILE_DEVICE_CONTROLLER          0x00000004
  24. #define IOCTL_SCSI_BASE                 FILE_DEVICE_CONTROLLER
  25.  
  26. #define IOCTL_SCSI_PASS_THROUGH         CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  27. #define IOCTL_SCSI_PASS_THROUGH_DIRECT  CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  28. #define IOCTL_SCSI_MINIPORT             CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  29.  
  30. #define SCSI_IOCTL_DATA_OUT          0
  31. #define SCSI_IOCTL_DATA_IN           1
  32. #define SCSI_IOCTL_DATA_UNSPECIFIED  2
  33.  
  34. typedef struct _SCSI_PASS_THROUGH_DIRECT {
  35.     USHORT Length;
  36.     UCHAR ScsiStatus;
  37.     UCHAR PathId;
  38.     UCHAR TargetId;
  39.     UCHAR Lun;
  40.     UCHAR CdbLength;
  41.     UCHAR SenseInfoLength;
  42.     UCHAR DataIn;
  43.     ULONG DataTransferLength;
  44.     ULONG TimeOutValue;
  45.     PVOID DataBuffer;
  46.     ULONG SenseInfoOffset;
  47.     UCHAR Cdb[16];
  48. } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
  49.  
  50. #pragma pack(push, cdb, 1)
  51. typedef union _CDB
  52. {
  53.     //
  54.     // Standard 6-byte CDB
  55.     //
  56.  
  57.     struct _CDB6READWRITE {
  58.         UCHAR OperationCode;
  59.         UCHAR LogicalBlockMsb1 : 5;
  60.         UCHAR LogicalUnitNumber : 3;
  61.         UCHAR LogicalBlockMsb0;
  62.         UCHAR LogicalBlockLsb;
  63.         UCHAR TransferBlocks;
  64.         UCHAR Control;
  65.     } CDB6READWRITE, *PCDB6READWRITE;
  66.  
  67.     //
  68.     // SCSI Inquiry CDB
  69.     //
  70.  
  71.     struct _CDB6INQUIRY {
  72.         UCHAR OperationCode;
  73.         UCHAR Reserved1 : 5;
  74.         UCHAR LogicalUnitNumber : 3;
  75.         UCHAR PageCode;
  76.         UCHAR IReserved;
  77.         UCHAR AllocationLength;
  78.         UCHAR Control;
  79.     } CDB6INQUIRY, *PCDB6INQUIRY;
  80.  
  81.     //
  82.     // Mode sense
  83.     //
  84.  
  85.     struct _MODE_SENSE10 {
  86.         UCHAR OperationCode;
  87.         UCHAR Reserved1 : 3;
  88.         UCHAR Dbd : 1;
  89.         UCHAR Reserved2 : 1;
  90.         UCHAR LogicalUnitNumber : 3;
  91.         UCHAR PageCode : 6;
  92.         UCHAR Pc : 2;
  93.         UCHAR Reserved3[4];
  94.         UCHAR AllocationLength[2];
  95.         UCHAR Control;
  96.     } MODE_SENSE10, *PMODE_SENSE10;
  97.  
  98.     //
  99.     // Mode select
  100.     //
  101.  
  102.     struct _MODE_SELECT10 {
  103.         UCHAR OperationCode;
  104.         UCHAR SPBit : 1;
  105.         UCHAR Reserved1 : 3;
  106.         UCHAR PFBit : 1;
  107.         UCHAR LogicalUnitNumber : 3;
  108.         UCHAR Reserved2[5];
  109.         UCHAR ParameterListLength[2];
  110.         UCHAR Control;
  111.     } MODE_SELECT10, *PMODE_SELECT10;
  112.  
  113.     //
  114.     // Standard 10-byte CDB
  115.  
  116.     struct _CDB10 {
  117.         UCHAR OperationCode;
  118.         UCHAR RelativeAddress : 1;
  119.         UCHAR Reserved1 : 2;
  120.         UCHAR ForceUnitAccess : 1;
  121.         UCHAR DisablePageOut : 1;
  122.         UCHAR LogicalUnitNumber : 3;
  123.         UCHAR LogicalBlockByte0;
  124.         UCHAR LogicalBlockByte1;
  125.         UCHAR LogicalBlockByte2;
  126.         UCHAR LogicalBlockByte3;
  127.         UCHAR Reserved2;
  128.         UCHAR TransferBlocksMsb;
  129.         UCHAR TransferBlocksLsb;
  130.         UCHAR Control;
  131.     } CDB10;
  132.  
  133.     //
  134.     // Standard 12-byte CDB
  135.     //
  136.  
  137.     struct _CDB12 {
  138.         UCHAR OperationCode;
  139.         UCHAR RelativeAddress : 1;
  140.         UCHAR Reserved1 : 2;
  141.         UCHAR ForceUnitAccess : 1;
  142.         UCHAR DisablePageOut : 1;
  143.         UCHAR LogicalUnitNumber : 3;
  144.         UCHAR LogicalBlock[4];
  145.         UCHAR TransferLength[4];
  146.         UCHAR Reserved2;
  147.         UCHAR Control;
  148.     } CDB12;
  149.  
  150.     struct _READ_CD {
  151.         // +0
  152.         UCHAR OperationCode;
  153.         // +1
  154.         UCHAR RelAdr : 1;
  155.         UCHAR Reserved1 : 1;
  156.         UCHAR SectorType : 3;
  157.         UCHAR Reserved2 : 3;
  158.         // +2..+5
  159.         UCHAR LogicalBlock[4];
  160.         // +6..+8
  161.         UCHAR TransferLenBlk[3];
  162.         // +9
  163.         UCHAR Reserved3 : 1;
  164.         UCHAR ErrField : 2;
  165.         UCHAR EdcEcc : 1;
  166.         UCHAR UserData : 1;
  167.         UCHAR HdrCodes : 2;
  168.         UCHAR Sync : 1;
  169.         // +10
  170.         UCHAR SubChSelBits : 3;
  171.         UCHAR Reserved4 : 5;
  172.         // +11
  173.         UCHAR Control;
  174.     } READ_CD;
  175.  
  176.     struct _START_STOP {
  177.         UCHAR OperationCode;    // 0x1B - SCSIOP_START_STOP_UNIT
  178.         UCHAR Immediate: 1;
  179.         UCHAR Reserved1 : 4;
  180.         UCHAR LogicalUnitNumber : 3;
  181.         UCHAR Reserved2[2];
  182.         UCHAR Start : 1;
  183.         UCHAR LoadEject : 1;
  184.         UCHAR Reserved3 : 6;
  185.         UCHAR Control;
  186.     } START_STOP;
  187.  
  188.     ULONG AsUlong[4];
  189.     UCHAR AsByte[16];
  190.  
  191. } CDB, *PCDB;
  192. #pragma pack(pop, cdb)
  193.  
  194. typedef struct _INQUIRYDATA
  195. {
  196.     UCHAR DeviceType : 5;
  197.     UCHAR DeviceTypeQualifier : 3;
  198.     UCHAR DeviceTypeModifier : 7;
  199.     UCHAR RemovableMedia : 1;
  200.     UCHAR Versions;
  201.     UCHAR ResponseDataFormat : 4;
  202.     UCHAR HiSupport : 1;
  203.     UCHAR NormACA : 1;
  204.     UCHAR ReservedBit : 1;
  205.     UCHAR AERC : 1;
  206.     UCHAR AdditionalLength;
  207.     UCHAR Reserved[2];
  208.     UCHAR SoftReset : 1;
  209.     UCHAR CommandQueue : 1;
  210.     UCHAR Reserved2 : 1;
  211.     UCHAR LinkedCommands : 1;
  212.     UCHAR Synchronous : 1;
  213.     UCHAR Wide16Bit : 1;
  214.     UCHAR Wide32Bit : 1;
  215.     UCHAR RelativeAddressing : 1;
  216.     UCHAR VendorId[8];
  217.     UCHAR ProductId[16];
  218.     UCHAR ProductRevisionLevel[4];
  219.     UCHAR VendorSpecific[20];
  220.     UCHAR Reserved3[40];
  221. } INQUIRYDATA, *PINQUIRYDATA;
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231. /****************************************************************************
  232. *                                                                           *
  233. * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY     *
  234. * KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE       *
  235. * IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR     *
  236. * PURPOSE.                                                                  *
  237. *                                                                           *
  238. * Copyright (C) 1993-95  Microsoft Corporation.  All Rights Reserved.       *
  239. *                                                                           *
  240. ****************************************************************************/
  241.  
  242. //***************************************************************************
  243. //
  244. // Name:              WNASPI32.H
  245. //
  246. // Description: ASPI for Win32 definitions ('C' Language)
  247. //
  248. //***************************************************************************
  249.  
  250. #ifdef __cplusplus
  251. extern "C" {
  252. #endif
  253.  
  254. typedef void *LPSRB;
  255. typedef void (*PFNPOST)();
  256.  
  257. DWORD SendASPI32Command    (LPSRB);
  258. DWORD GetASPI32SupportInfo (VOID);
  259.  
  260. #define SENSE_LEN                                       14                      // Default sense buffer length
  261. #define SRB_DIR_SCSI                            0x00            // Direction determined by SCSI                                                                                                                         // command
  262. #define SRB_DIR_IN                                      0x08            // Transfer from SCSI target to                                                                                                                         // host
  263. #define SRB_DIR_OUT                                     0x10            // Transfer from host to SCSI                                                                                                                   // target
  264. #define SRB_POSTING                                     0x01            // Enable ASPI posting
  265. #define SRB_EVENT_NOTIFY            0x40        // Enable ASPI event notification
  266. #define SRB_ENABLE_RESIDUAL_COUNT       0x04            // Enable residual byte count                                                                                                                   // reporting
  267. #define SRB_DATA_SG_LIST                        0x02            // Data buffer points to                                                                                                                                        // scatter-gather list
  268. #define WM_ASPIPOST                                     0x4D42          // ASPI Post message
  269. //***************************************************************************
  270. //                                               %%% ASPI Command Definitions %%%
  271. //***************************************************************************
  272. #define SC_HA_INQUIRY                           0x00            // Host adapter inquiry
  273. #define SC_GET_DEV_TYPE                         0x01            // Get device type
  274. #define SC_EXEC_SCSI_CMD                        0x02            // Execute SCSI command
  275. #define SC_ABORT_SRB                            0x03            // Abort an SRB
  276. #define SC_RESET_DEV                            0x04            // SCSI bus device reset
  277. #define SC_GET_DISK_INFO                        0x06            // Get Disk information
  278.  
  279. //***************************************************************************
  280. //                                                                %%% SRB Status %%%
  281. //***************************************************************************
  282. #define SS_PENDING                      0x00            // SRB being processed
  283. #define SS_COMP                         0x01            // SRB completed without error
  284. #define SS_ABORTED                      0x02            // SRB aborted
  285. #define SS_ABORT_FAIL           0x03            // Unable to abort SRB
  286. #define SS_ERR                          0x04            // SRB completed with error
  287.  
  288. #define SS_INVALID_CMD          0x80            // Invalid ASPI command
  289. #define SS_INVALID_HA           0x81            // Invalid host adapter number
  290. #define SS_NO_DEVICE            0x82            // SCSI device not installed
  291.  
  292. #define SS_INVALID_SRB          0xE0            // Invalid parameter set in SRB
  293. #define SS_FAILED_INIT          0xE4            // ASPI for windows failed init
  294. #define SS_ASPI_IS_BUSY         0xE5            // No resources available to execute cmd
  295. #define SS_BUFFER_TO_BIG        0xE6            // Buffer size to big to handle!
  296.  
  297. //***************************************************************************
  298. //                                                      %%% Host Adapter Status %%%
  299. //***************************************************************************
  300. #define HASTAT_OK                                       0x00    // Host adapter did not detect an                                                                                                                       // error
  301. #define HASTAT_SEL_TO                           0x11    // Selection Timeout
  302. #define HASTAT_DO_DU                            0x12    // Data overrun data underrun
  303. #define HASTAT_BUS_FREE                         0x13    // Unexpected bus free
  304. #define HASTAT_PHASE_ERR                        0x14    // Target bus phase sequence                                                                                                                            // failure
  305. #define HASTAT_TIMEOUT                          0x09    // Timed out while SRB was                                                                                                                                      waiting to beprocessed.
  306. #define HASTAT_COMMAND_TIMEOUT          0x0B    // While processing the SRB, the
  307.                                                                                                                         // adapter timed out.
  308. #define HASTAT_MESSAGE_REJECT           0x0D    // While processing SRB, the                                                                                                                            // adapter received a MESSAGE                                                                                                                   // REJECT.
  309. #define HASTAT_BUS_RESET                        0x0E    // A bus reset was detected.
  310. #define HASTAT_PARITY_ERROR                     0x0F    // A parity error was detected.
  311. #define HASTAT_REQUEST_SENSE_FAILED     0x10    // The adapter failed in issuing
  312.                                                                                                                 //   REQUEST SENSE.
  313.  
  314. //***************************************************************************
  315. //                       %%% SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY %%%
  316. //***************************************************************************
  317. typedef struct {
  318.         BYTE    SRB_Cmd;                                // ASPI command code = SC_HA_INQUIRY
  319.         BYTE    SRB_Status;                             // ASPI command status byte
  320.         BYTE    SRB_HaId;                               // ASPI host adapter number
  321.         BYTE    SRB_Flags;                              // ASPI request flags
  322.         DWORD   SRB_Hdr_Rsvd;                   // Reserved, MUST = 0
  323.         BYTE    HA_Count;                               // Number of host adapters present
  324.         BYTE    HA_SCSI_ID;                             // SCSI ID of host adapter
  325.         BYTE    HA_ManagerId[16];               // String describing the manager
  326.         BYTE    HA_Identifier[16];              // String describing the host adapter
  327.         BYTE    HA_Unique[16];                  // Host Adapter Unique parameters
  328.         WORD    HA_Rsvd1;
  329.  
  330. } SRB_HAInquiry, *PSRB_HAInquiry;
  331.  
  332. //***************************************************************************
  333. //                        %%% SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE %%%
  334. //***************************************************************************
  335. typedef struct {
  336.  
  337.         BYTE    SRB_Cmd;                                // ASPI command code = SC_GET_DEV_TYPE
  338.         BYTE    SRB_Status;                             // ASPI command status byte
  339.         BYTE    SRB_HaId;                               // ASPI host adapter number
  340.         BYTE    SRB_Flags;                              // Reserved
  341.         DWORD   SRB_Hdr_Rsvd;                   // Reserved
  342.         BYTE    SRB_Target;                             // Target's SCSI ID
  343.         BYTE    SRB_Lun;                                // Target's LUN number
  344.         BYTE    SRB_DeviceType;                 // Target's peripheral device type
  345.         BYTE    SRB_Rsvd1;
  346.  
  347. } SRB_GDEVBlock, *PSRB_GDEVBlock;
  348.  
  349. //***************************************************************************
  350. //                %%% SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD %%%
  351. //***************************************************************************
  352.  
  353. typedef struct {
  354.         BYTE    SRB_Cmd;                                // ASPI command code = SC_EXEC_SCSI_CMD
  355.         BYTE    SRB_Status;                             // ASPI command status byte
  356.         BYTE    SRB_HaId;                               // ASPI host adapter number
  357.         BYTE    SRB_Flags;                              // ASPI request flags
  358.         DWORD   SRB_Hdr_Rsvd;                   // Reserved
  359.         BYTE    SRB_Target;                             // Target's SCSI ID
  360.         BYTE    SRB_Lun;                                // Target's LUN number
  361.         WORD    SRB_Rsvd1;                              // Reserved for Alignment
  362.         DWORD   SRB_BufLen;                             // Data Allocation Length
  363.         BYTE    *SRB_BufPointer;                // Data Buffer Pointer
  364.         BYTE    SRB_SenseLen;                   // Sense Allocation Length
  365.         BYTE    SRB_CDBLen;                             // CDB Length
  366.         BYTE    SRB_HaStat;                             // Host Adapter Status
  367.         BYTE    SRB_TargStat;                   // Target Status
  368.         void    *SRB_PostProc;                  // Post routine
  369.         void    *SRB_Rsvd2;                             // Reserved
  370.         BYTE    SRB_Rsvd3[16];                  // Reserved for alignment
  371.         BYTE    CDBByte[16];                    // SCSI CDB
  372.         BYTE    SenseArea[SENSE_LEN+2]; // Request Sense buffer
  373.  
  374. } SRB_ExecSCSICmd, *PSRB_ExecSCSICmd;
  375.  
  376. //***************************************************************************
  377. //                                %%% SRB - ABORT AN SRB - SC_ABORT_SRB %%%
  378. //***************************************************************************
  379. typedef struct {
  380.  
  381.         BYTE    SRB_Cmd;                                // ASPI command code = SC_EXEC_SCSI_CMD
  382.         BYTE    SRB_Status;                             // ASPI command status byte
  383.         BYTE    SRB_HaId;                               // ASPI host adapter number
  384.         BYTE    SRB_Flags;                              // Reserved
  385.         DWORD   SRB_Hdr_Rsvd;                   // Reserved
  386.         void    *SRB_ToAbort;                   // Pointer to SRB to abort
  387.  
  388. } SRB_Abort, *PSRB_Abort;
  389.  
  390. //***************************************************************************
  391. //                              %%% SRB - BUS DEVICE RESET - SC_RESET_DEV %%%
  392. //***************************************************************************
  393. typedef struct {
  394.  
  395.         BYTE    SRB_Cmd;                                // ASPI command code = SC_EXEC_SCSI_CMD
  396.         BYTE    SRB_Status;                             // ASPI command status byte
  397.         BYTE    SRB_HaId;                               // ASPI host adapter number
  398.         BYTE    SRB_Flags;                              // Reserved
  399.         DWORD   SRB_Hdr_Rsvd;                   // Reserved
  400.         BYTE    SRB_Target;                             // Target's SCSI ID
  401.         BYTE    SRB_Lun;                                // Target's LUN number
  402.         BYTE    SRB_Rsvd1[12];                  // Reserved for Alignment
  403.         BYTE    SRB_HaStat;                             // Host Adapter Status
  404.         BYTE    SRB_TargStat;                   // Target Status
  405.         void    *SRB_PostProc;                  // Post routine
  406.         void    *SRB_Rsvd2;                             // Reserved
  407.         BYTE    SRB_Rsvd3[16];                  // Reserved
  408.         BYTE    CDBByte[16];                    // SCSI CDB
  409.  
  410. } SRB_BusDeviceReset, *PSRB_BusDeviceReset;
  411.  
  412. //***************************************************************************
  413. //                              %%% SRB - GET DISK INFORMATION - SC_GET_DISK_INFO %%%
  414. //***************************************************************************
  415. typedef struct {
  416.  
  417.         BYTE    SRB_Cmd;                                // ASPI command code = SC_EXEC_SCSI_CMD
  418.         BYTE    SRB_Status;                             // ASPI command status byte
  419.         BYTE    SRB_HaId;                               // ASPI host adapter number
  420.         BYTE    SRB_Flags;                              // Reserved
  421.         DWORD   SRB_Hdr_Rsvd;                   // Reserved
  422.         BYTE    SRB_Target;                             // Target's SCSI ID
  423.         BYTE    SRB_Lun;                                // Target's LUN number
  424.         BYTE    SRB_DriveFlags;                 // Driver flags
  425.         BYTE    SRB_Int13HDriveInfo;    // Host Adapter Status
  426.         BYTE    SRB_Heads;                              // Preferred number of heads translation
  427.         BYTE    SRB_Sectors;                    // Preferred number of sectors translation
  428.         BYTE    SRB_Rsvd1[10];                  // Reserved
  429. } SRB_GetDiskInfo, *PSRB_GetDiskInfo;
  430.  
  431.  
  432. //
  433. // SCSI CDB operation codes
  434. //
  435.  
  436. // 6-byte commands:
  437. #define SCSIOP_TEST_UNIT_READY          0x00
  438.  
  439. // 10-byte commands
  440. #define SCSIOP_START_STOP_UNIT          0x1B
  441. #define SCSIOP_READ                     0x28
  442. #define SCSIOP_READ_TOC                 0x43
  443. #define SCSIOP_MODE_SENSE_10            0x5A
  444. #define SCSIOP_READ_CAPACITY_10         0x25
  445.  
  446. // 12-byte commands
  447. #define SCSIOP_SET_CD_SPEED             0xBB
  448. #define SCSIOP_READ_CD                  0xBE
  449.  
  450. #ifdef __cplusplus
  451. }
  452. #endif
  453.  
  454.