📄 sdusbmassstorage.h
字号:
//////////////////////////////////////////////////////////////////////
// File: SDUsbMassStorage.h
// $Archive: /SDisk/SDUsbMassStorage.h $
//
// Purpose:
// Header file for the SecurityDisk
//
// Environment:
//
//
// $Author: Ywei $
//
// $History: SDUsbMassStorage.h $
//////////////////////////////////////////////////////////////////////
#ifndef H_SDUSBMASSSTORAGE
#define H_SDUSBMASSSTORAGE
#include <windows.h>
extern "C"
{
#include "setupapi.h"
}
#include <stdio.h>
#include <initguid.h>
#include <winioctl.h>
#include <cfgmgr32.h>
#include <dbt.h>
//
//Header file of SCSI function
//
#include <NTDDSCSI.h>
#define MASSTIMEOUT 3000
//#define MAX_PATH 256
/* Max inquiry buffer length */
#define MAX_INQUIRY_BUFFER_LENGTH 0x800
#define SCSITRANSLEN8 8
#define CDB6GENERIC_LENGTH 6
#define CDB10GENERIC_LENGTH 0xa
#define CDB12GENERIC_LENGTH 12
//
// Commands for all device types
// From :SCSI Primary Commands - 3 (SPC-3) & :UFI Command Specification
//
#define SCSI_INQUIRY 0x12
#define SCSI_WRITEBUFFER 0x3b
#define UFI_READ10 0x28
#define UFI_WRITE10 0x2a
#define UFI_READCAPACITY 0x25
//
// special commands for SDISK
//
#define UFI_READCAPACITY_TOTAL 0x251
#define SD_INPUTPASSWORD 0x252
#define SD_MODIFYPASSWORD 0x253
#define SD_WRITEENABLE 0x254
#define SD_BACKUP 0x255
#define SD_GUDISK 0x256
#define SD_LOGOUT 0x257
#define SD_DISCONNECT 0x258
#define SD_GETKEY 0x259
#define SD_GET_DESKEY 0x25A
#define SD_SET_DESKEY 0x25B
#define DISKSYMBOL "fameg"
#define PWLENGTH 4
const UCHAR ORIGINALPW[8]={0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
typedef struct _SCSIRETURN {
unsigned char Data[ 8 ];
} SCSIRETURN;
const SCSIRETURN RIGHTPASSWORD = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
typedef struct _CBWDATA{
unsigned char Data[ 15 ];
} CBWDATA;
extern CBWDATA FORMATLASTBLOCK;
extern DWORD INQUIRY_BUFFER_LENGTH ;//= 0x800;
extern DWORD RESERVESECTORS ;//= 0x80;
extern DWORD DISK0SECTORS ;// BY DEREK
extern const UCHAR INITKEY[8];
const UCHAR MAXLUNINCS = 0x01; //弹出盘符数(store in configuration sector)
const DWORD DISCONNECTTIMES = 100; //弹出盘符重复次数
#ifdef ADD_PARTITION
const CBWDATA FORMATMBR={00, 00, 00, 0x00+(UCHAR)(DISK0SECTORS >> 8), 0x00+(UCHAR)(DISK0SECTORS), 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
#else
const CBWDATA FORMATMBR={00, 00, 00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
#endif
typedef struct _SCSI_PASS_THROUGH_WITH_BUFFERS {
SCSI_PASS_THROUGH spt;
ULONG Filler; // realign buffers to double word boundary
UCHAR ucSenseBuf[32];
UCHAR ucDataBuf[512];
} SCSI_PASS_THROUGH_WITH_BUFFERS, *PSCSI_PASS_THROUGH_WITH_BUFFERS;
typedef struct _SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER {
SCSI_PASS_THROUGH_DIRECT sptd;
ULONG Filler; // realign buffer to double word boundary
UCHAR ucSenseBuf[32];
} SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, *PSCSI_PASS_THROUGH_DIRECT_WITH_BUFFER;
/*
*********************************************************************************************************
Function: Get symbolic link name of the special Guid
Parameter:
Input: GUID* pGuid ----------- pointer to guid
DWORD instance ----------- device index from 0
Output: char *psyslinkname ----------- buffer of symbolic link name
Return:
Device handle
*********************************************************************************************************
*/
HANDLE GetDeviceViaInterface( GUID* pGuid, DWORD instance,char *psyslinkname);
HANDLE GetDeviceViaInterface( GUID* pGuid, DWORD instance);
/*
*********************************************************************************************************
Function: Get symbolic link name of the special Usb Device
Parameter:
Output: char *psyslinkname ----------- buffer of symbolic link name
Return:
TRUE of FALSE
*********************************************************************************************************
*/
BOOL GetDeviceName(char *psyslinkname);
/*
*********************************************************************************************************
Function: Read, Write and Control the special Usb Disk by SCSI Control Code
Parameter:
In: LPSTR lpDeviceName ----------- pointer to Buffer of Device Name
DWORD dwIoControlCode ----------- Control Code
LPVOID lpCDBBuffer ----------- pointer to Buffer of Command
LPOVERLAPPED lpOverlapped ----------- pointer to Overlapped Object
DWORD nTimeout ----------- Timeout(ms)
DWORD nOutBufferSize ----------- Size of Data Buffer
In/Out:
LPVOID lpOutBuffer ----------- Data Buffer
Out: LPDWORD lpBytesReturned ----------- Length of Data Transfer
Return:
TRUE or FALSE
*********************************************************************************************************
*/
BOOL MassStorageIO(
LPSTR lpDeviceName,
DWORD dwIoControlCode,
LPVOID lpCDBBuffer,
LPVOID lpOutBuffer,
DWORD nOutBufferSize,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped,
DWORD nTimeout
);
/*
*********************************************************************************************************
Function: Disconnect the special usb device by Guid
Parameter:
Input: GUID* pGuid ----------- pointer to guid
Return:
0:OK 1:Error
*********************************************************************************************************
*/
int DisconnectDevice( GUID* pGuid);
/*
*********************************************************************************************************
Function: Change Usb Device State to New State
Parameter:
Input: DWORD NewState ----------- New Usb State
Return:
True:OK False:Error
*********************************************************************************************************
*/
BOOL StateChange(DWORD NewState);
/*
*********************************************************************************************************
Function: Register window or service to accept the special device message
Parameter:
Input: HANDLE hRecipient ----------- Handle to window or service
GUID* pGuid ----------- pointer to guid
Return:
True:OK False:Error
*********************************************************************************************************
*/
BOOL RegisterDevice(HANDLE hRecipient, GUID* pGuid);
/*
*********************************************************************************************************
Function: Process Encrypt/Decrypt Key from the usb device
Parameter:
Input: char * strDeviceName ----------- Usb Device Name
In/Out: UCHAR *KeyOut ----------- Encrypt/Decrypt Key
Return:
True:OK False:Error
*********************************************************************************************************
*/
BOOL ProcessKey(char * strDeviceName,UCHAR *KeyOut);
#endif //#ifndef H_SDUSBMASSSTORAGE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -