DriverEntry 创建一个命名的内核通知事件对象
HANDLE g_hEvent = NULL;
PKEVENT g_kEvent = NULL;
__debugbreak();
UNICODE_STRING usEventName = RTL_CONSTANT_STRING(L"\\BaseNamedObjects\\test_event");
g_kEvent = IoCreateNotificationEvent(&usEventName, &g_hEvent);
KeClearEvent(g_kEvent);
// 修改内核对象安全描述符
SetEventACL(g_hEvent);
DbgPrint("g_kEvent=%p g_hEvent=%p Name=%wZ \n",g_kEvent, g_hEvent, &usEventName);
用户层打开该对象,并创建线程,等待事件通知
HANDLE g_UserEvent = NULL;
DWORD WINAPI MyThreadFunction( LPVOID lpParam )
{
if(WAIT_OBJECT_0 == WaitForSingleObject(g_UserEvent, INFINITE))
{
printf("User Mode Thread Signaled.\n");
}
printf("Loop Thread Exited.\n");
return 0;
}
int main()
{
do
{
g_UserEvent = OpenEventA(SYNCHRONIZE, NULL, "Global\\test_event");
} while (!g_UserEvent);
HANDLE hThread = CreateThread(0, NULL, MyThreadFunction, NULL, 0, NULL);
pr

本文介绍如何在内核模式下创建并设置事件对象的安全描述符,使得用户模式下的普通用户也能访问这些事件对象。通过修改内核事件对象的安全描述符,加入SeAliasUsersSid,实现了普通用户对内核事件的访问。
最低0.47元/天 解锁文章
1753





