Something went wrong. Try again.
Reactos
Something went wrong. Try again.
3.4 kB · 157 lines
C
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158#include "DriverTester.h"
static BOOLInitialize(LPCWSTR lpDriverPath){ if (!RegisterDriver(DRIVER_NAME, lpDriverPath)) { wprintf(L"[%lu] Failed to install %s\n", GetLastError(), DRIVER_NAME); return FALSE; }
return TRUE;}
static BOOLUninitialize(LPCWSTR lpDriverPath){ if (!UnregisterDriver(DRIVER_NAME)) { wprintf(L"[%lu] Failed to unregister %s\n", GetLastError(), DRIVER_NAME); return FALSE; }
return TRUE;}
static BOOLUsermodeMethod(LPCWSTR lpDriverPath){ wprintf(L"\nStarting %s.sys via the SCM\n", DRIVER_NAME);
if (!StartDriver(DRIVER_NAME)) { wprintf(L"[%lu] Failed to start %s\n", GetLastError(), DRIVER_NAME); UnregisterDriver(DRIVER_NAME); return FALSE; }
wprintf(L"\tStarted\n");
wprintf(L"Stopping %s.sys via the SCM\n", DRIVER_NAME);
if (!StopDriver(DRIVER_NAME)) { wprintf(L"[%lu] Failed to stop %s\n", GetLastError(), DRIVER_NAME); UnregisterDriver(DRIVER_NAME); return FALSE; }
wprintf(L"\tStopped\n");
return TRUE;}
static BOOLUndocumentedMethod(LPCWSTR lpDriverPath){ wprintf(L"\nStarting %s.sys via native API\n", DRIVER_NAME);
if (!NtStartDriver(DRIVER_NAME)) { wprintf(L"[%lu] Failed to start %s\n", GetLastError(), DRIVER_NAME); UnregisterDriver(DRIVER_NAME); return FALSE; }
wprintf(L"\tStarted\n");
wprintf(L"Stopping %s.sys via native API\n", DRIVER_NAME);
if (!NtStopDriver(DRIVER_NAME)) { wprintf(L"[%lu] Failed to stop %s\n", GetLastError(), DRIVER_NAME); UnregisterDriver(DRIVER_NAME); return FALSE; }
wprintf(L"\tStopped\n");
return TRUE;}
static BOOLSneakyUndocumentedMethods(LPCWSTR lpDriverPath){ WCHAR szDevice[MAX_PATH];
if (ConvertPath(lpDriverPath, szDevice)) { wprintf(L"\nStarting %s.sys via NtSetSystemInformation with SystemLoadGdiDriverInformation\n", DRIVER_NAME); if (LoadVia_SystemLoadGdiDriverInformation(szDevice)) { wprintf(L"\tStarted\n");
NtStopDriver(DRIVER_NAME); }
wprintf(L"\nStarting %s.sys via NtSetSystemInformation with SystemExtendServiceTableInformation\n", DRIVER_NAME); if (LoadVia_SystemExtendServiceTableInformation(szDevice)) { wprintf(L"\tStarted\n");
NtStopDriver(DRIVER_NAME); }
return TRUE; }
return FALSE;}
int __cdecl wmain(int argc, wchar_t *argv[]){ WCHAR buf[MAX_PATH];
if (argc != 2) { wprintf(L"Usage: DriverTester.exe <path>"); return -1; }
if (!SearchPathW(NULL, argv[1], L".sys", MAX_PATH, buf, NULL)) { wprintf(L"%s does not exist", argv[1]); return -1; }
if (Initialize(argv[1])) { // // Load using conventional SCM methods // UsermodeMethod(argv[1]);
// // Load using undocumented NtLoad/UnloadDriver // UndocumentedMethod(argv[1]);
// // Load using hidden unknown methods // SneakyUndocumentedMethods(argv[1]);
Uninitialize(argv[1]); }
return 0;}