- 注册时间
- 2021-4-16
- 最后登录
- 2023-11-9
- 在线时间
- 4 小时
编程入门
- 龙马币
- 108
|
- NTSTATUS __fastcall proxyNtCreateDebugObject(
- OUT PHANDLE DebugObjectHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN ULONG Flags )
- {
- NTSTATUS status;
- HANDLE Handle;
- PDEBUG_OBJECT DebugObject;
- KPROCESSOR_MODE PreviousMode;
- PreviousMode = ExGetPreviousMode();
- //判断用户层句柄地址是否合法
- try {
- if (PreviousMode != KernelMode) {
- ProbeForWriteHandle (DebugObjectHandle);
- *DebugObjectHandle = *DebugObjectHandle;
- }
- *DebugObjectHandle = NULL;
- } except(ExSystemExceptionFilter()) {
- return GetExceptionCode();
- }
- if (Flags & ~DEBUG_KILL_ON_CLOSE) {
- return STATUS_INVALID_PARAMETER;
- }
- //创建调试对象
- status = ObCreateObject(
- PreviousMode,
- NewDbgObject, //调试对象类型,后面我们要换成我们新建的调试对象类型
- ObjectAttributes,
- PreviousMode,
- NULL,
- sizeof(DEBUG_OBJECT),
- 0,
- 0,
- (PVOID*)&DebugObject);
- if (!NT_SUCCESS(status)) {
- return status;
- }
- //初始化调试对象
- ExInitializeFastMutex(&DebugObject->Mutex);
- InitializeListHead(&DebugObject->EventList);
- KeInitializeEvent(&DebugObject->EventsPresent, NotificationEvent, FALSE);
- if (Flags & DEBUG_KILL_ON_CLOSE) {
- DebugObject->Flags = DEBUG_OBJECT_KILL_ON_CLOSE;
- }
- else {
- DebugObject->Flags = 0;
- }
- //调试对象插入句柄表
- status = ObInsertObject(
- DebugObject,
- NULL,
- DesiredAccess,
- 0,
- NULL,
- &Handle);
- if (!NT_SUCCESS(status)) {
- return status;
- }
- try {
- *DebugObjectHandle = Handle;
- } except(ExSystemExceptionFilter()) {
- status = GetExceptionCode();
- }
- return status;
- }
复制代码 |
|