【内核与用户层同步】内核对象安全描述符降权

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

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
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值