Files
interactive/fhs/arcmond2/external/include/win_ioctl.h
T
2026-08-07 17:38:18 +09:00

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