diff --git a/modules/rostests/kmtests/include/kmt_test.h b/modules/rostests/kmtests/include/kmt_test.h index 2f0315a48b5..1e265c9a05a 100644 --- a/modules/rostests/kmtests/include/kmt_test.h +++ b/modules/rostests/kmtests/include/kmt_test.h @@ -186,7 +186,7 @@ DWORD KmtSendBufferToDriver(IN DWORD ControlCode, IN OUT PVOID Buffer OPTIONAL, DWORD KmtFltCreateService(_In_z_ PCWSTR ServiceName, _In_z_ PCWSTR DisplayName, _Out_ SC_HANDLE *ServiceHandle); DWORD KmtFltDeleteService(_In_opt_z_ PCWSTR ServiceName, _Inout_ SC_HANDLE *ServiceHandle); DWORD KmtFltAddAltitude(_In_z_ LPWSTR Altitude); -DWORD KmtFltLoadDriver(_In_ BOOLEAN EnableDriverLoadPrivlege, _In_ BOOLEAN RestartIfRunning, _In_ BOOLEAN ConnectComms, _Out_ HANDLE *hPort); +DWORD KmtFltLoadDriver(_In_ BOOLEAN EnableDriverLoadPrivilege, _In_ BOOLEAN RestartIfRunning, _In_ BOOLEAN ConnectComms, _Out_ HANDLE *hPort); DWORD KmtFltUnloadDriver(_In_ HANDLE *hPort, _In_ BOOLEAN DisonnectComms); DWORD KmtFltConnectComms(_Out_ HANDLE *hPort); DWORD KmtFltDisconnectComms(_In_ HANDLE hPort); diff --git a/modules/rostests/kmtests/kmtest/fltsupport.c b/modules/rostests/kmtests/kmtest/fltsupport.c index ae0cb05abb4..19868018d47 100644 --- a/modules/rostests/kmtests/kmtest/fltsupport.c +++ b/modules/rostests/kmtests/kmtest/fltsupport.c @@ -11,6 +11,7 @@ #include "kmtest.h" #include +#include #include #include @@ -25,10 +26,6 @@ KmtpCreateService( IN DWORD ServiceType, OUT SC_HANDLE *ServiceHandle); -DWORD EnablePrivilegeInCurrentProcess( - _In_z_ LPWSTR lpPrivName, - _In_ BOOL bEnable); - // move to a shared location typedef struct _KMTFLT_MESSAGE_HEADER { @@ -110,7 +107,7 @@ KmtFltDeleteService( */ DWORD KmtFltLoadDriver( - _In_ BOOLEAN EnableDriverLoadPrivlege, + _In_ BOOLEAN EnableDriverLoadPrivilege, _In_ BOOLEAN RestartIfRunning, _In_ BOOLEAN ConnectComms, _Out_ HANDLE *hPort @@ -118,13 +115,16 @@ KmtFltLoadDriver( { DWORD Error; - if (EnableDriverLoadPrivlege) + if (EnableDriverLoadPrivilege) { - Error = EnablePrivilegeInCurrentProcess(SE_LOAD_DRIVER_NAME , TRUE); + BOOLEAN WasEnabled; + Error = RtlNtStatusToDosError(RtlAdjustPrivilege( + SE_LOAD_DRIVER_PRIVILEGE, + TRUE, + FALSE, // Enable in current process. + &WasEnabled)); if (Error) - { return Error; - } } Error = KmtFltLoad(TestServiceName); @@ -141,14 +141,10 @@ KmtFltLoadDriver( } if (Error) - { return Error; - } if (ConnectComms) - { Error = KmtFltConnectComms(hPort); - } return Error; } @@ -524,63 +520,3 @@ Quit: return Error; } - -/* -* Private functions, not meant for use in kmtests -*/ - -DWORD EnablePrivilege( - _In_ HANDLE hToken, - _In_z_ LPWSTR lpPrivName, - _In_ BOOL bEnable) -{ - TOKEN_PRIVILEGES TokenPrivileges; - LUID luid; - BOOL bSuccess; - DWORD dwError = ERROR_SUCCESS; - - /* Get the luid for this privilege */ - if (!LookupPrivilegeValueW(NULL, lpPrivName, &luid)) - return GetLastError(); - - /* Setup the struct with the priv info */ - TokenPrivileges.PrivilegeCount = 1; - TokenPrivileges.Privileges[0].Luid = luid; - TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0; - - /* Enable the privilege info in the token */ - bSuccess = AdjustTokenPrivileges(hToken, - FALSE, - &TokenPrivileges, - sizeof(TOKEN_PRIVILEGES), - NULL, - NULL); - if (bSuccess == FALSE) dwError = GetLastError(); - - /* return status */ - return dwError; -} - -DWORD EnablePrivilegeInCurrentProcess( - _In_z_ LPWSTR lpPrivName, - _In_ BOOL bEnable) -{ - HANDLE hToken; - BOOL bSuccess; - DWORD dwError = ERROR_SUCCESS; - - /* Get a handle to our token */ - bSuccess = OpenProcessToken(GetCurrentProcess(), - TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, - &hToken); - if (bSuccess == FALSE) return GetLastError(); - - /* Enable the privilege in the agent token */ - dwError = EnablePrivilege(hToken, lpPrivName, bEnable); - - /* We're done with this now */ - CloseHandle(hToken); - - /* return status */ - return dwError; -} diff --git a/modules/rostests/kmtests/kmtest/kmtest.h b/modules/rostests/kmtests/kmtest/kmtest.h index a32d41c0546..2a6c9ef2216 100644 --- a/modules/rostests/kmtests/kmtest/kmtest.h +++ b/modules/rostests/kmtests/kmtest/kmtest.h @@ -126,6 +126,6 @@ KmtFltDeleteService( DWORD KmtFltCloseService( _Inout_ SC_HANDLE *ServiceHandle); -#endif /* KMT_FILTER_DRIVER */ +#endif /* KMT_FLT_USER_MODE */ #endif /* !defined _KMTESTS_H_ */