28
28
#include "config.h"
29
29
#include "ext2fs.h"
30
30
#include "rufus.h"
31
+ #include "ntdll.h"
31
32
#include "msapi_utf8.h"
32
33
33
34
extern char * NtStatusError (NTSTATUS Status );
34
35
static DWORD LastWinError = 0 ;
35
36
36
- PF_TYPE_DECL (NTAPI , ULONG , RtlNtStatusToDosError , (NTSTATUS ));
37
- PF_TYPE_DECL (NTAPI , NTSTATUS , NtClose , (HANDLE ));
38
- PF_TYPE_DECL (NTAPI , NTSTATUS , NtOpenFile , (PHANDLE , ACCESS_MASK , POBJECT_ATTRIBUTES , PIO_STATUS_BLOCK , ULONG , ULONG ));
39
- PF_TYPE_DECL (NTAPI , NTSTATUS , NtFlushBuffersFile , (HANDLE , PIO_STATUS_BLOCK ));
40
- PF_TYPE_DECL (NTAPI , NTSTATUS , NtReadFile , (HANDLE , HANDLE , PIO_APC_ROUTINE , PVOID , PIO_STATUS_BLOCK , PVOID , ULONG , PLARGE_INTEGER , PULONG ));
41
- PF_TYPE_DECL (NTAPI , NTSTATUS , NtWriteFile , (HANDLE , HANDLE , PIO_APC_ROUTINE , PVOID , PIO_STATUS_BLOCK , PVOID , ULONG , PLARGE_INTEGER , PULONG ));
42
- PF_TYPE_DECL (NTAPI , NTSTATUS , NtDeviceIoControlFile , (HANDLE , HANDLE , PIO_APC_ROUTINE , PVOID , PIO_STATUS_BLOCK , ULONG , PVOID , ULONG , PVOID , ULONG ));
43
- PF_TYPE_DECL (NTAPI , NTSTATUS , NtFsControlFile , (HANDLE , HANDLE , PIO_APC_ROUTINE , PVOID , PIO_STATUS_BLOCK , ULONG , PVOID , ULONG , PVOID , ULONG ));
44
- PF_TYPE_DECL (NTAPI , NTSTATUS , NtDelayExecution , (BOOLEAN , PLARGE_INTEGER ));
45
-
46
37
#define ARGUMENT_PRESENT (ArgumentPointer ) ((CHAR *)((ULONG_PTR)(ArgumentPointer)) != (CHAR *)(NULL))
47
38
48
39
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
@@ -173,8 +164,7 @@ static unsigned _MapDosError(IN ULONG WinError)
173
164
// Map NT status to dos error.
174
165
static __inline unsigned _MapNtStatus (IN NTSTATUS Status )
175
166
{
176
- PF_INIT (RtlNtStatusToDosError , Ntdll );
177
- return (pfRtlNtStatusToDosError == NULL ) ? EFAULT : _MapDosError (pfRtlNtStatusToDosError (Status ));
167
+ return _MapDosError (RtlNtStatusToDosError (Status ));
178
168
}
179
169
180
170
// Return the last Windows Error
@@ -193,8 +183,6 @@ static NTSTATUS _OpenNtName(IN PCSTR Name, IN BOOLEAN Readonly, OUT PHANDLE Hand
193
183
NTSTATUS Status = EFAULT ;
194
184
OBJECT_ATTRIBUTES ObjectAttributes ;
195
185
IO_STATUS_BLOCK IoStatusBlock ;
196
- PF_INIT (NtDelayExecution , Ntdll );
197
- PF_INIT_OR_OUT (NtOpenFile , Ntdll );
198
186
199
187
// Make Unicode name from input string
200
188
utf8_to_wchar_no_alloc (Name , Buffer , ARRAYSIZE (Buffer ));
@@ -209,16 +197,16 @@ static NTSTATUS _OpenNtName(IN PCSTR Name, IN BOOLEAN Readonly, OUT PHANDLE Hand
209
197
if (ARGUMENT_PRESENT (OpenedReadonly ))
210
198
* OpenedReadonly = Readonly ;
211
199
212
- Status = pfNtOpenFile (Handle , SYNCHRONIZE | FILE_READ_DATA | (Readonly ? 0 : FILE_WRITE_DATA ),
200
+ Status = NtOpenFile (Handle , SYNCHRONIZE | FILE_READ_DATA | (Readonly ? 0 : FILE_WRITE_DATA ),
213
201
& ObjectAttributes , & IoStatusBlock , FILE_SHARE_WRITE | FILE_SHARE_READ ,
214
202
FILE_SYNCHRONOUS_IO_NONALERT );
215
203
if (!NT_SUCCESS (Status )) {
216
204
// Maybe was just mounted? wait 0.5 sec and retry.
217
205
LARGE_INTEGER Interval ;
218
206
Interval .QuadPart = -5000000 ; // 0.5 sec. from now
219
- pfNtDelayExecution (FALSE, & Interval );
207
+ NtDelayExecution (FALSE, & Interval );
220
208
221
- Status = pfNtOpenFile (Handle , SYNCHRONIZE | FILE_READ_DATA | (Readonly ? 0 : FILE_WRITE_DATA ),
209
+ Status = NtOpenFile (Handle , SYNCHRONIZE | FILE_READ_DATA | (Readonly ? 0 : FILE_WRITE_DATA ),
222
210
& ObjectAttributes , & IoStatusBlock , FILE_SHARE_WRITE | FILE_SHARE_READ ,
223
211
FILE_SYNCHRONOUS_IO_NONALERT );
224
212
@@ -227,13 +215,12 @@ static NTSTATUS _OpenNtName(IN PCSTR Name, IN BOOLEAN Readonly, OUT PHANDLE Hand
227
215
if (ARGUMENT_PRESENT (OpenedReadonly ))
228
216
* OpenedReadonly = TRUE;
229
217
230
- Status = pfNtOpenFile (Handle , SYNCHRONIZE | FILE_READ_DATA , & ObjectAttributes ,
218
+ Status = NtOpenFile (Handle , SYNCHRONIZE | FILE_READ_DATA , & ObjectAttributes ,
231
219
& IoStatusBlock , FILE_SHARE_WRITE | FILE_SHARE_READ ,
232
220
FILE_SYNCHRONOUS_IO_NONALERT );
233
221
}
234
222
}
235
223
236
- out :
237
224
return Status ;
238
225
}
239
226
@@ -247,45 +234,38 @@ static NTSTATUS _OpenDriveLetter(IN CHAR Letter, IN BOOLEAN ReadOnly, OUT PHANDL
247
234
static __inline NTSTATUS _FlushDrive (IN HANDLE Handle )
248
235
{
249
236
IO_STATUS_BLOCK IoStatusBlock ;
250
- PF_INIT (NtFlushBuffersFile , NtDll );
251
- return (pfNtFlushBuffersFile == NULL ) ? STATUS_DLL_NOT_FOUND : pfNtFlushBuffersFile (Handle , & IoStatusBlock );
237
+ return NtFlushBuffersFile (Handle , & IoStatusBlock );
252
238
}
253
239
254
240
255
241
static __inline NTSTATUS _LockDrive (IN HANDLE Handle )
256
242
{
257
243
IO_STATUS_BLOCK IoStatusBlock ;
258
- PF_INIT (NtFsControlFile , NtDll );
259
- return (pfNtFsControlFile == NULL ) ? STATUS_DLL_NOT_FOUND : pfNtFsControlFile (Handle , 0 , 0 , 0 , & IoStatusBlock , FSCTL_LOCK_VOLUME , 0 , 0 , 0 , 0 );
244
+ return NtFsControlFile (Handle , 0 , 0 , 0 , & IoStatusBlock , FSCTL_LOCK_VOLUME , 0 , 0 , 0 , 0 );
260
245
}
261
246
262
247
263
248
static __inline NTSTATUS _UnlockDrive (IN HANDLE Handle )
264
249
{
265
250
IO_STATUS_BLOCK IoStatusBlock ;
266
- PF_INIT (NtFsControlFile , NtDll );
267
- return (pfNtFsControlFile == NULL ) ? STATUS_DLL_NOT_FOUND : pfNtFsControlFile (Handle , 0 , 0 , 0 , & IoStatusBlock , FSCTL_UNLOCK_VOLUME , 0 , 0 , 0 , 0 );
251
+ return NtFsControlFile (Handle , 0 , 0 , 0 , & IoStatusBlock , FSCTL_UNLOCK_VOLUME , 0 , 0 , 0 , 0 );
268
252
}
269
253
270
254
static __inline NTSTATUS _DismountDrive (IN HANDLE Handle )
271
255
{
272
256
IO_STATUS_BLOCK IoStatusBlock ;
273
- PF_INIT (NtFsControlFile , NtDll );
274
- return (pfNtFsControlFile == NULL ) ? STATUS_DLL_NOT_FOUND : pfNtFsControlFile (Handle , 0 , 0 , 0 , & IoStatusBlock , FSCTL_DISMOUNT_VOLUME , 0 , 0 , 0 , 0 );
257
+ return NtFsControlFile (Handle , 0 , 0 , 0 , & IoStatusBlock , FSCTL_DISMOUNT_VOLUME , 0 , 0 , 0 , 0 );
275
258
}
276
259
277
260
static __inline BOOLEAN _IsMounted (IN HANDLE Handle )
278
261
{
279
262
IO_STATUS_BLOCK IoStatusBlock ;
280
- PF_INIT (NtFsControlFile , NtDll );
281
- return (pfNtFsControlFile == NULL ) ? FALSE :
282
- (BOOLEAN )(pfNtFsControlFile (Handle , 0 , 0 , 0 , & IoStatusBlock , FSCTL_IS_VOLUME_MOUNTED , 0 , 0 , 0 , 0 ) == STATUS_SUCCESS );
263
+ return (BOOLEAN )(NtFsControlFile (Handle , 0 , 0 , 0 , & IoStatusBlock , FSCTL_IS_VOLUME_MOUNTED , 0 , 0 , 0 , 0 ) == STATUS_SUCCESS );
283
264
}
284
265
285
266
static __inline NTSTATUS _CloseDisk (IN HANDLE Handle )
286
267
{
287
- PF_INIT (NtClose , Ntdll );
288
- return (pfNtClose == NULL ) ? STATUS_DLL_NOT_FOUND : pfNtClose (Handle );
268
+ return NtClose (Handle );
289
269
}
290
270
291
271
static PCSTR _NormalizeDeviceName (IN PCSTR Device , IN PSTR NormalizedDeviceNameBuffer , OUT __u64 * Offset , OUT __u64 * Size )
@@ -320,12 +300,9 @@ static VOID _GetDeviceSize(IN HANDLE h, OUT unsigned __int64 *FsSize)
320
300
LARGE_INTEGER li ;
321
301
322
302
* FsSize = 0 ;
323
- PF_INIT (NtDeviceIoControlFile , NtDll );
324
- if (pfNtDeviceIoControlFile == NULL )
325
- return ;
326
303
327
304
RtlZeroMemory (& pi , sizeof (pi ));
328
- Status = pfNtDeviceIoControlFile (h , NULL , NULL , NULL , & IoStatusBlock ,
305
+ Status = NtDeviceIoControlFile (h , NULL , NULL , NULL , & IoStatusBlock ,
329
306
IOCTL_DISK_GET_PARTITION_INFO_EX ,
330
307
& pi , sizeof (pi ), & pi , sizeof (pi ));
331
308
if (NT_SUCCESS (Status )) {
@@ -334,7 +311,7 @@ static VOID _GetDeviceSize(IN HANDLE h, OUT unsigned __int64 *FsSize)
334
311
// No partitions: Try a drive geometry request
335
312
RtlZeroMemory (& gi , sizeof (gi ));
336
313
337
- Status = pfNtDeviceIoControlFile (h , NULL , NULL , NULL , & IoStatusBlock ,
314
+ Status = NtDeviceIoControlFile (h , NULL , NULL , NULL , & IoStatusBlock ,
338
315
IOCTL_DISK_GET_DRIVE_GEOMETRY_EX ,
339
316
& gi , sizeof (gi ), & gi , sizeof (gi ));
340
317
@@ -389,8 +366,6 @@ static BOOLEAN _BlockIo(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Byte
389
366
{
390
367
IO_STATUS_BLOCK IoStatusBlock ;
391
368
NTSTATUS Status = STATUS_DLL_NOT_FOUND ;
392
- PF_INIT_OR_OUT (NtReadFile , NtDll );
393
- PF_INIT_OR_OUT (NtWriteFile , NtDll );
394
369
395
370
// Should be aligned
396
371
assert ((Bytes % 512 ) == 0 );
@@ -399,14 +374,13 @@ static BOOLEAN _BlockIo(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Byte
399
374
LastWinError = 0 ;
400
375
// Perform io
401
376
if (Read ) {
402
- Status = pfNtReadFile (Handle , NULL , NULL , NULL ,
377
+ Status = NtReadFile (Handle , NULL , NULL , NULL ,
403
378
& IoStatusBlock , Buffer , Bytes , & Offset , NULL );
404
379
} else {
405
- Status = pfNtWriteFile (Handle , NULL , NULL , NULL ,
380
+ Status = NtWriteFile (Handle , NULL , NULL , NULL ,
406
381
& IoStatusBlock , Buffer , Bytes , & Offset , NULL );
407
382
}
408
383
409
- out :
410
384
if (!NT_SUCCESS (Status )) {
411
385
if (ARGUMENT_PRESENT (Errno ))
412
386
* Errno = _MapNtStatus (Status );
@@ -431,10 +405,7 @@ static BOOLEAN _RawRead(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Byte
431
405
static BOOLEAN _SetPartType (IN HANDLE Handle , IN UCHAR Type )
432
406
{
433
407
IO_STATUS_BLOCK IoStatusBlock ;
434
- PF_INIT (NtDeviceIoControlFile , NtDll );
435
- if (pfNtDeviceIoControlFile == NULL )
436
- return FALSE;
437
- return NT_SUCCESS (pfNtDeviceIoControlFile (Handle , NULL , NULL , NULL , & IoStatusBlock ,
408
+ return NT_SUCCESS (NtDeviceIoControlFile (Handle , NULL , NULL , NULL , & IoStatusBlock ,
438
409
IOCTL_DISK_SET_PARTITION_INFO , & Type , sizeof (Type ), NULL , 0 ));
439
410
}
440
411
0 commit comments