⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdusbmassstorage.h

📁 上位机磁盘mass storage传输应用
💻 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 + -