4 Virtual Floppy Drive for Windows NT platform
5 Kernel mode driver: imported elements from various sources
7 Copyright (C) 2003-2005 Ken Kato
11 a) #include directive for system headers
13 b) Stuff imported from newer DDKs so that the driver built with older
14 DDKs can run on newer Windows.
16 c) Stuff imported from ntifs.h (http://www.acc.umu.se/~bosse/) so that
17 the driver can be compiled without it.
19 d) Prototypes of standard functions which are exported from ntoskrnl.exe
20 but not declared in regular DDK header files.
31 #pragma warning(push,3)
41 // disable unwanted (and trivial) warnings :
42 // 4054 - type cast from a function pointer to a data pointer
43 // 4201 - anonymous structure
44 // 4514 - unreferenced inline function
45 #pragma warning(disable: 4054 4201 4514)
48 #if (VER_PRODUCTBUILD >= 2195)
50 #else // (VER_PRODUCTBUILD < 2195)
52 // Imports from Windows 2000 DDK <ntddk.h>
54 typedef enum _MM_PAGE_PRIORITY
{
56 NormalPagePriority
= 16,
60 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
62 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
65 // Imports from Windows 2000 DDK <ntddstor.h>
67 #define IOCTL_STORAGE_CHECK_VERIFY2 CTL_CODE( \
74 // Imports from Windows 2000 DDK <mountmgr.h>, <mountdev.h>
76 #define MOUNTMGR_DEVICE_NAME L"\\Device\\MountPointManager"
77 #define MOUNTMGRCONTROLTYPE ((ULONG) 'm')
78 #define MOUNTDEVCONTROLTYPE ((ULONG) 'M')
80 #define IOCTL_MOUNTDEV_QUERY_UNIQUE_ID CTL_CODE( \
86 #define IOCTL_MOUNTDEV_UNIQUE_ID_CHANGE_NOTIFY \
93 #define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME CTL_CODE( \
99 #define IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME \
101 MOUNTDEVCONTROLTYPE,\
106 #define IOCTL_MOUNTDEV_LINK_CREATED CTL_CODE( \
107 MOUNTDEVCONTROLTYPE,\
112 #define IOCTL_MOUNTDEV_LINK_DELETED CTL_CODE( \
113 MOUNTDEVCONTROLTYPE,\
118 #define IOCTL_MOUNTMGR_CREATE_POINT CTL_CODE( \
119 MOUNTMGRCONTROLTYPE,\
122 FILE_READ_ACCESS | FILE_WRITE_ACCESS)
124 #define IOCTL_MOUNTMGR_DELETE_POINTS CTL_CODE( \
125 MOUNTMGRCONTROLTYPE,\
128 FILE_READ_ACCESS | FILE_WRITE_ACCESS)
130 #define IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION \
132 MOUNTMGRCONTROLTYPE,\
137 typedef struct _MOUNTDEV_UNIQUE_ID
{
138 USHORT UniqueIdLength
;
140 } MOUNTDEV_UNIQUE_ID
, *PMOUNTDEV_UNIQUE_ID
;
142 typedef struct _MOUNTDEV_NAME
{
145 } MOUNTDEV_NAME
, *PMOUNTDEV_NAME
;
147 typedef struct _MOUNTDEV_SUGGESTED_LINK_NAME
{
148 BOOLEAN UseOnlyIfThereAreNoOtherLinks
;
151 } MOUNTDEV_SUGGESTED_LINK_NAME
, *PMOUNTDEV_SUGGESTED_LINK_NAME
;
153 typedef struct _MOUNTMGR_TARGET_NAME
{
154 USHORT DeviceNameLength
;
156 } MOUNTMGR_TARGET_NAME
, *PMOUNTMGR_TARGET_NAME
;
158 typedef struct _MOUNTMGR_CREATE_POINT_INPUT
{
159 USHORT SymbolicLinkNameOffset
;
160 USHORT SymbolicLinkNameLength
;
161 USHORT DeviceNameOffset
;
162 USHORT DeviceNameLength
;
163 } MOUNTMGR_CREATE_POINT_INPUT
, *PMOUNTMGR_CREATE_POINT_INPUT
;
165 typedef struct _MOUNTMGR_MOUNT_POINT
{
166 ULONG SymbolicLinkNameOffset
;
167 USHORT SymbolicLinkNameLength
;
168 ULONG UniqueIdOffset
;
169 USHORT UniqueIdLength
;
170 ULONG DeviceNameOffset
;
171 USHORT DeviceNameLength
;
172 } MOUNTMGR_MOUNT_POINT
, *PMOUNTMGR_MOUNT_POINT
;
174 typedef struct _MOUNTMGR_MOUNT_POINTS
{
176 ULONG NumberOfMountPoints
;
177 MOUNTMGR_MOUNT_POINT MountPoints
[1];
178 } MOUNTMGR_MOUNT_POINTS
, *PMOUNTMGR_MOUNT_POINTS
;
180 #endif // (VER_PRODUCTBUILD < 2195)
182 #if (VER_PRODUCTBUILD < 2600)
184 // Imports from Windows XP DDK <ntdddisk.h>
186 #define IOCTL_DISK_GET_PARTITION_INFO_EX CTL_CODE( \
192 #define IOCTL_DISK_GET_LENGTH_INFO CTL_CODE( \
198 typedef unsigned __int64 ULONG64
, *PULONG64
;
200 typedef enum _PARTITION_STYLE
{
205 typedef struct _PARTITION_INFORMATION_MBR
{
207 BOOLEAN BootIndicator
;
208 BOOLEAN RecognizedPartition
;
210 } PARTITION_INFORMATION_MBR
, *PPARTITION_INFORMATION_MBR
;
212 typedef struct _PARTITION_INFORMATION_GPT
{
217 } PARTITION_INFORMATION_GPT
, *PPARTITION_INFORMATION_GPT
;
219 typedef struct _PARTITION_INFORMATION_EX
{
220 PARTITION_STYLE PartitionStyle
;
221 LARGE_INTEGER StartingOffset
;
222 LARGE_INTEGER PartitionLength
;
223 ULONG PartitionNumber
;
224 BOOLEAN RewritePartition
;
226 PARTITION_INFORMATION_MBR Mbr
;
227 PARTITION_INFORMATION_GPT Gpt
;
229 } PARTITION_INFORMATION_EX
, *PPARTITION_INFORMATION_EX
;
231 typedef struct _GET_LENGTH_INFORMATION
{
232 LARGE_INTEGER Length
;
233 } GET_LENGTH_INFORMATION
, *PGET_LENGTH_INFORMATION
;
236 // Imports from Windows XP DDK <ntddstor.h>
238 #define IOCTL_STORAGE_GET_HOTPLUG_INFO CTL_CODE( \
239 IOCTL_STORAGE_BASE, \
244 typedef struct _STORAGE_HOTPLUG_INFO
{
246 BOOLEAN MediaRemovable
;
247 BOOLEAN MediaHotplug
;
248 BOOLEAN DeviceHotplug
;
249 BOOLEAN WriteCacheEnableOverride
;
250 } STORAGE_HOTPLUG_INFO
, *PSTORAGE_HOTPLUG_INFO
;
253 // Imports from Windows XP DDK <mountdev.h>
255 #define IOCTL_MOUNTDEV_QUERY_STABLE_GUID CTL_CODE( \
256 MOUNTDEVCONTROLTYPE,\
261 typedef struct _MOUNTDEV_STABLE_GUID
{
263 } MOUNTDEV_STABLE_GUID
, *PMOUNTDEV_STABLE_GUID
;
265 #endif // (VER_PRODUCTBUILD < 2600)
268 // Imports from ntifs.h
270 #define TOKEN_SOURCE_LENGTH 8
272 typedef enum _TOKEN_TYPE
{
277 typedef struct _TOKEN_SOURCE
{
278 CCHAR SourceName
[TOKEN_SOURCE_LENGTH
];
279 LUID SourceIdentifier
;
280 } TOKEN_SOURCE
, *PTOKEN_SOURCE
;
282 typedef struct _TOKEN_CONTROL
{
284 LUID AuthenticationId
;
286 TOKEN_SOURCE TokenSource
;
287 } TOKEN_CONTROL
, *PTOKEN_CONTROL
;
289 typedef struct _SECURITY_CLIENT_CONTEXT
{
290 SECURITY_QUALITY_OF_SERVICE SecurityQos
;
291 PACCESS_TOKEN ClientToken
;
292 BOOLEAN DirectlyAccessClientToken
;
293 BOOLEAN DirectAccessEffectiveOnly
;
294 BOOLEAN ServerIsRemote
;
295 TOKEN_CONTROL ClientTokenControl
;
296 } SECURITY_CLIENT_CONTEXT
, *PSECURITY_CLIENT_CONTEXT
;
298 #define PsDereferenceImpersonationToken(T) \
299 if (ARGUMENT_PRESENT(T)) (ObDereferenceObject((T)))
301 #define PsDereferencePrimaryToken(T) (ObDereferenceObject((T)))
313 SeCreateClientSecurity (
315 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService
,
316 IN BOOLEAN RemoteClient
,
317 OUT PSECURITY_CLIENT_CONTEXT ClientContext
320 #define SeDeleteClientSecurity(C) \
322 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
323 PsDereferencePrimaryToken((C)->ClientToken); \
326 PsDereferenceImpersonationToken((C)->ClientToken); \
333 SeImpersonateClient (
334 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
335 IN PETHREAD ServerThread OPTIONAL
342 IN PACCESS_TOKEN Token
346 // Functions exported by ntoskrnl.exe, but not declared in DDK headers
348 int _snprintf(char *buffer
, size_t count
, const char *format
, ...);
349 int _snwprintf(wchar_t *buffer
, size_t count
, const wchar_t *format
, ...);
350 int sprintf(char *buffer
, const char *format
, ...);
351 int _swprintf(wchar_t *buffer
, const wchar_t *format
, ...);
355 #endif // __cplusplus
357 #endif // _IMPORTS_H_