81 lines
2.4 KiB
C
81 lines
2.4 KiB
C
#ifndef _WINIOCTL_H_
|
|
#define _WINIOCTL_H_
|
|
|
|
#include "commdef.h"
|
|
#include "interface.h"
|
|
|
|
#include <iostream>
|
|
#include <tchar.h>
|
|
|
|
#include <wtypes.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <windows.h>
|
|
#include <winioctl.h>
|
|
|
|
#define FILE_DEVICE_CONTROLLER 0x00000004
|
|
|
|
#define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
|
|
|
|
#define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) //0x0004D008 see NTDDSCSI.H for definition
|
|
#define IOCTL_SCSI_RESCAN_BUS CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
|
#define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
|
|
|
#define ARCMSR_IOCTL_READ_RQBUFFER 0x90002004
|
|
#define ARCMSR_IOCTL_WRITE_WQBUFFER 0x90002008
|
|
#define ARCMSR_IOCTL_CLEAR_RQBUFFER 0x9000200C
|
|
#define ARCMSR_IOCTL_CLEAR_WQBUFFER 0x90002010
|
|
#define ARCMSR_IOCTL_CLEAR_ALLQBUFFER 0x90002014
|
|
#define ARCMSR_IOCTL_RETURN_CODE_3F 0x90002018
|
|
#define ARCMSR_IOCTL_SAY_HELLO 0x9000201C
|
|
|
|
|
|
// return code
|
|
#define SRB_STATUS_SUCCESS 0x01
|
|
#define SRB_STATUS_INVALID_REQUEST 0x06
|
|
|
|
|
|
typedef struct _SRB_IO_CONTROL
|
|
{
|
|
ULONG HeaderLength;
|
|
UCHAR Signature[8];
|
|
ULONG Timeout;
|
|
ULONG ControlCode;
|
|
ULONG ReturnCode;
|
|
ULONG Length;
|
|
}sSRB_IO_CONTROL, *pSRB_IO_CONTROL;
|
|
|
|
typedef struct _SRB_BUFFER
|
|
{
|
|
sSRB_IO_CONTROL srbioctl;
|
|
UCHAR ioctldatabuffer[1032];
|
|
}sSRB_BUFFER, *pSRB_BUFFER;
|
|
|
|
|
|
|
|
class ARCLIB_API WinIoctlInterface : public ArcInterface
|
|
{
|
|
friend class CArclib;
|
|
public:
|
|
WinIoctlInterface();
|
|
~WinIoctlInterface();
|
|
bool init(const int nScsiPort);
|
|
int send(sIF_CMD_BLOCK *ifData);
|
|
int recv(sIF_CMD_BLOCK *ifData);
|
|
int syncSend(sIF_CMD_BLOCK *ifData);
|
|
int getMTU();
|
|
void *getDeviceHandle();
|
|
void requirelock();
|
|
void releaselock();
|
|
|
|
private:
|
|
BOOL ClearReadBuffer();
|
|
BOOL ClearWriteBuffer();
|
|
BOOL ClearReadWriteBuffer();
|
|
HANDLE m_hScsi;
|
|
HANDLE m_hSyncIm;
|
|
PSECURITY_DESCRIPTOR pSD;
|
|
};
|
|
|
|
#endif |