驱动中调用 ZwOpenProcess 后关闭句柄问题

在写遍历EPROCESS链表的时候,关闭自己的程序后,总是不能在进程链表中抹去,查了半天,原来是句柄资源没有释放的问题。

的在调用完 ZwOpenProcess 后,使用完句柄,需要调用 ZwClose 关闭句柄。否则句柄资源没有释放,关闭程序后,进程还会残留在 EPROCESS 进程链表中。

        InitializeObjectAttributes(&ObjectAttributes, 0, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, 0, 0);
        clientid.UniqueProcess = (HANDLE)dwPid;
        clientid.UniqueThread = 0;
        NTSTATUS Status = ZwOpenProcess(&hProcess, PROCESS_ALL_ACCESS, &ObjectAttributes, &clientid);
        if (Status != STATUS_SUCCESS)
        {
            goto __EXIT;
        }

        ....
        //使用 hProcess 后,需要关闭句柄

        ZwClose(hProcess);

你可能感兴趣的:(windows内核)