|
1 /* |
|
2 * mcd.h |
|
3 * |
|
4 * Media changer driver interface |
|
5 * |
|
6 * This file is part of the w32api package. |
|
7 * |
|
8 * Contributors: |
|
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> |
|
10 * |
|
11 * THIS SOFTWARE IS NOT COPYRIGHTED |
|
12 * |
|
13 * This source code is offered for use in the public domain. You may |
|
14 * use, modify or distribute it freely. |
|
15 * |
|
16 * This code is distributed in the hope that it will be useful but |
|
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY |
|
18 * DISCLAIMED. This includes but is not limited to warranties of |
|
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
|
20 * |
|
21 */ |
|
22 |
|
23 #ifndef __MCD_H |
|
24 #define __MCD_H |
|
25 |
|
26 #if __GNUC__ >=3 |
|
27 #pragma GCC system_header |
|
28 #endif |
|
29 |
|
30 #ifdef __cplusplus |
|
31 extern "C" { |
|
32 #endif |
|
33 |
|
34 #include "ntddk.h" |
|
35 #include "srb.h" |
|
36 #include "scsi.h" |
|
37 #include "ntddchgr.h" |
|
38 |
|
39 #if defined(_MCD_) |
|
40 #define CHANGERAPI DECLSPEC_EXPORT |
|
41 #else |
|
42 #define CHANGERAPI DECLSPEC_IMPORT |
|
43 #endif |
|
44 |
|
45 #ifdef DebugPrint |
|
46 #undef DebugPrint |
|
47 #endif |
|
48 |
|
49 #ifdef DBG |
|
50 #define DebugPrint(x) ChangerClassDebugPrint x |
|
51 #else |
|
52 #define DebugPrint(x) |
|
53 #endif |
|
54 |
|
55 #define MAXIMUM_CHANGER_INQUIRY_DATA 252 |
|
56 |
|
57 CHANGERAPI |
|
58 PVOID |
|
59 DDKAPI |
|
60 ChangerClassAllocatePool( |
|
61 /*IN*/ POOL_TYPE PoolType, |
|
62 /*IN*/ ULONG NumberOfBytes); |
|
63 |
|
64 VOID |
|
65 ChangerClassDebugPrint( |
|
66 ULONG DebugPrintLevel, |
|
67 PCCHAR DebugMessage, |
|
68 ...); |
|
69 |
|
70 CHANGERAPI |
|
71 PVOID |
|
72 DDKAPI |
|
73 ChangerClassFreePool( |
|
74 /*IN*/ PVOID PoolToFree); |
|
75 |
|
76 CHANGERAPI |
|
77 NTSTATUS |
|
78 DDKAPI |
|
79 ChangerClassSendSrbSynchronous( |
|
80 /*IN*/ PDEVICE_OBJECT DeviceObject, |
|
81 /*IN*/ PSCSI_REQUEST_BLOCK Srb, |
|
82 /*IN*/ PVOID Buffer, |
|
83 /*IN*/ ULONG BufferSize, |
|
84 /*IN*/ BOOLEAN WriteToDevice); |
|
85 |
|
86 |
|
87 typedef NTSTATUS DDKAPI |
|
88 (*CHANGER_INITIALIZE)( |
|
89 /*IN*/ PDEVICE_OBJECT DeviceObject); |
|
90 |
|
91 typedef ULONG DDKAPI |
|
92 (*CHANGER_EXTENSION_SIZE)( |
|
93 VOID); |
|
94 |
|
95 typedef VOID DDKAPI |
|
96 (*CHANGER_ERROR_ROUTINE)( |
|
97 PDEVICE_OBJECT DeviceObject, |
|
98 PSCSI_REQUEST_BLOCK Srb, |
|
99 NTSTATUS *Status, |
|
100 BOOLEAN *Retry); |
|
101 |
|
102 typedef NTSTATUS DDKAPI |
|
103 (*CHANGER_COMMAND_ROUTINE)( |
|
104 /*IN*/ PDEVICE_OBJECT DeviceObject, |
|
105 /*IN*/ PIRP Irp); |
|
106 |
|
107 typedef NTSTATUS DDKAPI |
|
108 (*CHANGER_PERFORM_DIAGNOSTICS)( |
|
109 /*IN*/ PDEVICE_OBJECT DeviceObject, |
|
110 /*OUT*/ PWMI_CHANGER_PROBLEM_DEVICE_ERROR ChangerDeviceError); |
|
111 |
|
112 typedef struct _MCD_INIT_DATA { |
|
113 ULONG InitDataSize; |
|
114 CHANGER_EXTENSION_SIZE ChangerAdditionalExtensionSize; |
|
115 CHANGER_INITIALIZE ChangerInitialize; |
|
116 CHANGER_ERROR_ROUTINE ChangerError; |
|
117 CHANGER_PERFORM_DIAGNOSTICS ChangerPerformDiagnostics; |
|
118 CHANGER_COMMAND_ROUTINE ChangerGetParameters; |
|
119 CHANGER_COMMAND_ROUTINE ChangerGetStatus; |
|
120 CHANGER_COMMAND_ROUTINE ChangerGetProductData; |
|
121 CHANGER_COMMAND_ROUTINE ChangerSetAccess; |
|
122 CHANGER_COMMAND_ROUTINE ChangerGetElementStatus; |
|
123 CHANGER_COMMAND_ROUTINE ChangerInitializeElementStatus; |
|
124 CHANGER_COMMAND_ROUTINE ChangerSetPosition; |
|
125 CHANGER_COMMAND_ROUTINE ChangerExchangeMedium; |
|
126 CHANGER_COMMAND_ROUTINE ChangerMoveMedium; |
|
127 CHANGER_COMMAND_ROUTINE ChangerReinitializeUnit; |
|
128 CHANGER_COMMAND_ROUTINE ChangerQueryVolumeTags; |
|
129 } MCD_INIT_DATA, *PMCD_INIT_DATA; |
|
130 |
|
131 CHANGERAPI |
|
132 NTSTATUS |
|
133 DDKAPI |
|
134 ChangerClassInitialize( |
|
135 /*IN*/ PDRIVER_OBJECT DriverObject, |
|
136 /*IN*/ PUNICODE_STRING RegistryPath, |
|
137 /*IN*/ PMCD_INIT_DATA MCDInitData); |
|
138 |
|
139 #ifdef __cplusplus |
|
140 } |
|
141 #endif |
|
142 |
|
143 #endif /* __MCD_H */ |