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

📄 dvdproxy2k.h

📁 DVD工具dvdsynth的源码
💻 H
字号:
/***********************************************************************
 Copyright 2002 Ben Rudiak-Gould.

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA,
 or visit <http://www.gnu.org/copyleft/gpl.html>.
***********************************************************************/


// dvdproxy.h - declarations related to the protocol between the
// user-mode and kernel-mode code


static unsigned char dvdproxy_device_inquiry_data[36] = {
   0x03,0x00,0x02,0x02,0x1F,0x00,0x00,0x02,
   'D','V','D','P','r','o','x','y',
   'd','u','m','m','y',' ','d','e','v','i','c','e',' ',' ',' ',' ',
   '1','.','0',' '
};


#define DVDPROXY_SIGNATURE "DVDSynth"

static const unsigned long DVDPROXY_CTLCODE_GET_SRB = 0xEEEEEEE0;
static const unsigned long DVDPROXY_CTLCODE_KEEP_ALIVE = 0xEEEEEEE1;
static const unsigned long DVDPROXY_CTLCODE_RETIRE_SRB = 0xEEEEEEE2;
static const unsigned long DVDPROXY_CTLCODE_BUS_CHANGE = 0xEEEEEEE3;
static const unsigned long DVDPROXY_CTLCODE_DETACH = 0xEEEEEEE4;

static const unsigned long DVDPROXY_RTNCODE_GOT_SRB = 0xEEEEEEF0;
static const unsigned long DVDPROXY_RTNCODE_NEED_MORE_DATA_SPACE = 0xEEEEEEF1;
static const unsigned long DVDPROXY_RTNCODE_LISTEN_TIMEOUT = 0xEEEEEEF2;
static const unsigned long DVDPROXY_RTNCODE_DETACH = 0xEEEEEEF3;
static const unsigned long DVDPROXY_RTNCODE_OLD_LISTENER = 0xEEEEEEF4;

struct RequestHeader {
   unsigned long sequence_number;
   unsigned char target;
   unsigned char data_transfer_direction;   // 1 = "in" (virtual device->app), 2 = "out" (app->virtual device)
   unsigned char cdb_length;
   unsigned char reserved;
};


struct SRB_IO_CONTROL {
   ULONG HeaderLength;
   UCHAR Signature[8];
   ULONG Timeout;
   ULONG ControlCode;
   ULONG ReturnCode;
   ULONG Length;
};


static const unsigned char DVDPROXY_SCSIOP = 0xEE;
static const unsigned char DVDPROXY_VERSION = 0x1F;

static const unsigned char DVDPROXY_CMD_GET_SRB = 100;
static const unsigned char DVDPROXY_CMD_KEEP_ALIVE = 101;
static const unsigned char DVDPROXY_CMD_RETIRE_SRB = 102;
static const unsigned char DVDPROXY_CMD_BUS_CHANGE = 103;
static const unsigned char DVDPROXY_CMD_SET_INQUIRY_DATA = 104;
static const unsigned char DVDPROXY_CMD_DETACH = 105;
static const unsigned char DVDPROXY_CMD_GENERATE_ERROR = 106;

// error messages
static const unsigned DVDPROXY_ERROR_INVALID_COMMAND = 0xEEEE0;
static const unsigned DVDPROXY_ERROR_WRONG_VERSION = 0xEEEEE;
static const unsigned DVDPROXY_ERROR_NEED_MORE_DATA_SPACE = 0xEEEE1;
static const unsigned DVDPROXY_ERROR_DETACH = 0xEEEE2;
static const unsigned DVDPROXY_ERROR_LISTEN_TIMEOUT = 0xEEEE3;
static const unsigned DVDPROXY_ERROR_OLD_LISTENER = 0xEEEE4;


struct CDB_Dvdproxy {
   unsigned char opcode;  // DVDPROXY_SCSIOP
   unsigned char version; // DVDPROXY_VERSION
   unsigned char cmd;
   unsigned char args[9];
};


// DVDPROXY_CMD_THUNK_CALL:
//    * Calls specified export from specified function in kernel mode.

struct CDB_Thunk_Call {
   unsigned char opcode;  // DVDPROXY_SCSIOP
   unsigned char version; // DVDPROXY_VERSION
   unsigned char cmd;     // DVDPROXY_CMD_THUNK_CALL
   unsigned char reserved;
   void*         hmodule;
   const char*   export_name;   // or ordinal
};

static const void* hmodule_miniport = (void*)~0;


struct CDB_GetSRB {
   unsigned char opcode;  // DVDPROXY_SCSIOP
   unsigned char version; // DVDPROXY_VERSION
   unsigned char cmd;     // DVDPROXY_CMD_GET_SRB
   unsigned char reserved1;
   unsigned short tick_length_in_ms;
   unsigned char listen_timeout;    // number of ticks before failing this SRB
   unsigned char response_timeout;  // number of ticks after this SRB returns before assuming user app is frozen
   unsigned char reserved2[4];
};

struct CDB_KeepAlive {
   unsigned char opcode;  // DVDPROXY_SCSIOP
   unsigned char version; // DVDPROXY_VERSION
   unsigned char cmd;     // DVDPROXY_CMD_KEEP_ALIVE
   unsigned char ticks;
   unsigned char reserved[8];
};

struct CDB_RetireSRB {
   unsigned char opcode;  // DVDPROXY_SCSIOP
   unsigned char version; // DVDPROXY_VERSION
   unsigned char cmd;     // DVDPROXY_CMD_RETIRE_SRB
   unsigned char sense_included;    // TRUE if SenseData structure included at end of buffer
   unsigned long sequence_number;
   unsigned char srb_status;
   unsigned char scsi_status;
   unsigned char reserved[2];
};

struct CDB_BusChange {
   unsigned char opcode;  // DVDPROXY_SCSIOP
   unsigned char version; // DVDPROXY_VERSION
   unsigned char cmd;     // DVDPROXY_CMD_BUS_CHANGE
   unsigned char reserved[9];
};

struct CDB_SetInquiryData {
   unsigned char opcode;  // DVDPROXY_SCSIOP
   unsigned char version; // DVDPROXY_VERSION
   unsigned char cmd;     // DVDPROXY_CMD_SET_INQUIRY_DATA
   unsigned char reserved[9];
};

struct CDB_GenerateError {
   unsigned char opcode;  // DVDPROXY_SCSIOP
   unsigned char version; // DVDPROXY_VERSION
   unsigned char cmd;     // DVDPROXY_CMD_GENERATE_ERROR
   unsigned char error_code;
   unsigned char reserved2[8];
};


struct UserModeRequest {   // 28 bytes
   unsigned long sequence_number;
   unsigned char target;
   unsigned char data_transfer_direction;   // 1 = "in" (virtual device->app), 2 = "out" (app->virtual device)
   unsigned char cdb_length;
   unsigned char reserved;
   unsigned long data_transfer_length;
   unsigned char cdb[16];
};


struct InquiryData {
   unsigned char inquiry_length;       // 0 means no device
   unsigned char modepage_2a_length;   // 0 means no such page
   unsigned char reserved[2];
   unsigned char inquiry[36];
   unsigned char modepage_2a[40];
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -