Skip to content

Commit 01d18d9

Browse files
committed
[misc] remove manual hooks into ntdll
* Since we are now liking with ntdll directly, we can remove all the hooks we applied and just use regular calls. We also rename process.h to ntdll.h as a result.
1 parent 4adfa4f commit 01d18d9

File tree

9 files changed

+174
-160
lines changed

9 files changed

+174
-160
lines changed

.vs/rufus.vcxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@
426426
<ClInclude Include="..\src\mbr_types.h" />
427427
<ClInclude Include="..\src\missing.h" />
428428
<ClInclude Include="..\src\msvc-missing\unistd.h" />
429-
<ClInclude Include="..\src\process.h" />
429+
<ClInclude Include="..\src\ntdll.h" />
430430
<ClInclude Include="..\src\re.h" />
431431
<ClInclude Include="..\src\settings.h" />
432432
<ClInclude Include="..\src\libcdio\cdio\cdio.h" />

.vs/rufus.vcxproj.filters

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@
161161
<ClInclude Include="..\src\db.h">
162162
<Filter>Header Files</Filter>
163163
</ClInclude>
164-
<ClInclude Include="..\src\process.h">
164+
<ClInclude Include="..\src\ntdll.h">
165165
<Filter>Header Files</Filter>
166166
</ClInclude>
167167
<ClInclude Include="..\src\ui.h">

src/drive.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#endif
3434

3535
#include "rufus.h"
36+
#include "ntdll.h"
3637
#include "missing.h"
3738
#include "resource.h"
3839
#include "settings.h"
@@ -66,8 +67,6 @@ const IID IID_IVdsVolume = { 0x88306BB2, 0xE71F, 0x478C, { 0x86, 0xA2, 0x79, 0xD
6667
const IID IID_IVdsVolumeMF3 = { 0x6788FAF9, 0x214E, 0x4B85, { 0xBA, 0x59, 0x26, 0x69, 0x53, 0x61, 0x6E, 0x09 } };
6768
#endif
6869

69-
PF_TYPE_DECL(NTAPI, NTSTATUS, NtQueryVolumeInformationFile, (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, FS_INFORMATION_CLASS));
70-
7170
/*
7271
* Globals
7372
*/
@@ -1097,15 +1096,13 @@ static BOOL _GetDriveLettersAndType(DWORD DriveIndex, char* drive_letters, UINT*
10971096
HANDLE hDrive = INVALID_HANDLE_VALUE, hPhysical = INVALID_HANDLE_VALUE;
10981097
UINT _drive_type;
10991098
IO_STATUS_BLOCK io_status_block;
1100-
FILE_FS_DEVICE_INFORMATION file_fs_device_info;
1099+
FILE_FS_DEVICE_INFORMATION file_fs_device_info = { 0 };
11011100
BYTE geometry[256] = { 0 };
11021101
PDISK_GEOMETRY_EX DiskGeometry = (PDISK_GEOMETRY_EX)(void*)geometry;
11031102
int i = 0, drives_found = 0, drive_number;
11041103
char *drive, drives[26*4 + 1]; /* "D:\", "E:\", etc., plus one NUL */
11051104
char logical_drive[] = "\\\\.\\#:";
11061105

1107-
PF_INIT(NtQueryVolumeInformationFile, Ntdll);
1108-
11091106
if (drive_letters != NULL)
11101107
drive_letters[0] = 0;
11111108
if (drive_type != NULL)
@@ -1156,8 +1153,7 @@ static BOOL _GetDriveLettersAndType(DWORD DriveIndex, char* drive_letters, UINT*
11561153
}
11571154

11581155
// Eliminate floppy drives
1159-
if ((pfNtQueryVolumeInformationFile != NULL) &&
1160-
(pfNtQueryVolumeInformationFile(hDrive, &io_status_block, &file_fs_device_info,
1156+
if ((NtQueryVolumeInformationFile(hDrive, &io_status_block, &file_fs_device_info,
11611157
sizeof(file_fs_device_info), FileFsDeviceInformation) == NO_ERROR) &&
11621158
(file_fs_device_info.Characteristics & FILE_FLOPPY_DISKETTE) ) {
11631159
continue;

src/drive.h

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,22 +61,6 @@
6161

6262
#define VDS_SET_ERROR(hr) do { if (hr != S_OK) { SetLastError((DWORD)hr); ErrorStatus = RUFUS_ERROR(ERROR_GEN_FAILURE); } } while(0)
6363

64-
#if !defined(__MINGW32__)
65-
typedef enum _FSINFOCLASS {
66-
FileFsVolumeInformation = 1,
67-
FileFsLabelInformation,
68-
FileFsSizeInformation,
69-
FileFsDeviceInformation,
70-
FileFsAttributeInformation,
71-
FileFsControlInformation,
72-
FileFsFullSizeInformation,
73-
FileFsObjectIdInformation,
74-
FileFsDriverPathInformation,
75-
FileFsVolumeFlagsInformation,
76-
FileFsMaximumInformation
77-
} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
78-
#endif
79-
8064
/* We need a redef of these MS structure */
8165
typedef struct {
8266
DWORD DeviceType;

src/ext2fs/nt_io.c

Lines changed: 17 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,12 @@
2828
#include "config.h"
2929
#include "ext2fs.h"
3030
#include "rufus.h"
31+
#include "ntdll.h"
3132
#include "msapi_utf8.h"
3233

3334
extern char* NtStatusError(NTSTATUS Status);
3435
static DWORD LastWinError = 0;
3536

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-
4637
#define ARGUMENT_PRESENT(ArgumentPointer) ((CHAR *)((ULONG_PTR)(ArgumentPointer)) != (CHAR *)(NULL))
4738

4839
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
@@ -173,8 +164,7 @@ static unsigned _MapDosError(IN ULONG WinError)
173164
// Map NT status to dos error.
174165
static __inline unsigned _MapNtStatus(IN NTSTATUS Status)
175166
{
176-
PF_INIT(RtlNtStatusToDosError, Ntdll);
177-
return (pfRtlNtStatusToDosError == NULL) ? EFAULT: _MapDosError(pfRtlNtStatusToDosError(Status));
167+
return _MapDosError(RtlNtStatusToDosError(Status));
178168
}
179169

180170
// Return the last Windows Error
@@ -193,8 +183,6 @@ static NTSTATUS _OpenNtName(IN PCSTR Name, IN BOOLEAN Readonly, OUT PHANDLE Hand
193183
NTSTATUS Status = EFAULT;
194184
OBJECT_ATTRIBUTES ObjectAttributes;
195185
IO_STATUS_BLOCK IoStatusBlock;
196-
PF_INIT(NtDelayExecution, Ntdll);
197-
PF_INIT_OR_OUT(NtOpenFile, Ntdll);
198186

199187
// Make Unicode name from input string
200188
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
209197
if (ARGUMENT_PRESENT(OpenedReadonly))
210198
*OpenedReadonly = Readonly;
211199

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),
213201
&ObjectAttributes, &IoStatusBlock, FILE_SHARE_WRITE | FILE_SHARE_READ,
214202
FILE_SYNCHRONOUS_IO_NONALERT);
215203
if (!NT_SUCCESS(Status)) {
216204
// Maybe was just mounted? wait 0.5 sec and retry.
217205
LARGE_INTEGER Interval;
218206
Interval.QuadPart = -5000000; // 0.5 sec. from now
219-
pfNtDelayExecution(FALSE, &Interval);
207+
NtDelayExecution(FALSE, &Interval);
220208

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),
222210
&ObjectAttributes, &IoStatusBlock, FILE_SHARE_WRITE | FILE_SHARE_READ,
223211
FILE_SYNCHRONOUS_IO_NONALERT);
224212

@@ -227,13 +215,12 @@ static NTSTATUS _OpenNtName(IN PCSTR Name, IN BOOLEAN Readonly, OUT PHANDLE Hand
227215
if (ARGUMENT_PRESENT(OpenedReadonly))
228216
*OpenedReadonly = TRUE;
229217

230-
Status = pfNtOpenFile(Handle, SYNCHRONIZE | FILE_READ_DATA, &ObjectAttributes,
218+
Status = NtOpenFile(Handle, SYNCHRONIZE | FILE_READ_DATA, &ObjectAttributes,
231219
&IoStatusBlock, FILE_SHARE_WRITE | FILE_SHARE_READ,
232220
FILE_SYNCHRONOUS_IO_NONALERT);
233221
}
234222
}
235223

236-
out:
237224
return Status;
238225
}
239226

@@ -247,45 +234,38 @@ static NTSTATUS _OpenDriveLetter(IN CHAR Letter, IN BOOLEAN ReadOnly, OUT PHANDL
247234
static __inline NTSTATUS _FlushDrive(IN HANDLE Handle)
248235
{
249236
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);
252238
}
253239

254240

255241
static __inline NTSTATUS _LockDrive(IN HANDLE Handle)
256242
{
257243
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);
260245
}
261246

262247

263248
static __inline NTSTATUS _UnlockDrive(IN HANDLE Handle)
264249
{
265250
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);
268252
}
269253

270254
static __inline NTSTATUS _DismountDrive(IN HANDLE Handle)
271255
{
272256
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);
275258
}
276259

277260
static __inline BOOLEAN _IsMounted(IN HANDLE Handle)
278261
{
279262
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);
283264
}
284265

285266
static __inline NTSTATUS _CloseDisk(IN HANDLE Handle)
286267
{
287-
PF_INIT(NtClose, Ntdll);
288-
return (pfNtClose == NULL) ? STATUS_DLL_NOT_FOUND : pfNtClose(Handle);
268+
return NtClose(Handle);
289269
}
290270

291271
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)
320300
LARGE_INTEGER li;
321301

322302
*FsSize = 0;
323-
PF_INIT(NtDeviceIoControlFile, NtDll);
324-
if (pfNtDeviceIoControlFile == NULL)
325-
return;
326303

327304
RtlZeroMemory(&pi, sizeof(pi));
328-
Status = pfNtDeviceIoControlFile(h, NULL, NULL, NULL, &IoStatusBlock,
305+
Status = NtDeviceIoControlFile(h, NULL, NULL, NULL, &IoStatusBlock,
329306
IOCTL_DISK_GET_PARTITION_INFO_EX,
330307
&pi, sizeof(pi), &pi, sizeof(pi));
331308
if (NT_SUCCESS(Status)) {
@@ -334,7 +311,7 @@ static VOID _GetDeviceSize(IN HANDLE h, OUT unsigned __int64 *FsSize)
334311
// No partitions: Try a drive geometry request
335312
RtlZeroMemory(&gi, sizeof(gi));
336313

337-
Status = pfNtDeviceIoControlFile(h, NULL, NULL, NULL, &IoStatusBlock,
314+
Status = NtDeviceIoControlFile(h, NULL, NULL, NULL, &IoStatusBlock,
338315
IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
339316
&gi, sizeof(gi), &gi, sizeof(gi));
340317

@@ -389,8 +366,6 @@ static BOOLEAN _BlockIo(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Byte
389366
{
390367
IO_STATUS_BLOCK IoStatusBlock;
391368
NTSTATUS Status = STATUS_DLL_NOT_FOUND;
392-
PF_INIT_OR_OUT(NtReadFile, NtDll);
393-
PF_INIT_OR_OUT(NtWriteFile, NtDll);
394369

395370
// Should be aligned
396371
assert((Bytes % 512) == 0);
@@ -399,14 +374,13 @@ static BOOLEAN _BlockIo(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Byte
399374
LastWinError = 0;
400375
// Perform io
401376
if(Read) {
402-
Status = pfNtReadFile(Handle, NULL, NULL, NULL,
377+
Status = NtReadFile(Handle, NULL, NULL, NULL,
403378
&IoStatusBlock, Buffer, Bytes, &Offset, NULL);
404379
} else {
405-
Status = pfNtWriteFile(Handle, NULL, NULL, NULL,
380+
Status = NtWriteFile(Handle, NULL, NULL, NULL,
406381
&IoStatusBlock, Buffer, Bytes, &Offset, NULL);
407382
}
408383

409-
out:
410384
if (!NT_SUCCESS(Status)) {
411385
if (ARGUMENT_PRESENT(Errno))
412386
*Errno = _MapNtStatus(Status);
@@ -431,10 +405,7 @@ static BOOLEAN _RawRead(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Byte
431405
static BOOLEAN _SetPartType(IN HANDLE Handle, IN UCHAR Type)
432406
{
433407
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,
438409
IOCTL_DISK_SET_PARTITION_INFO, &Type, sizeof(Type), NULL, 0));
439410
}
440411

0 commit comments

Comments
 (0)