lzj664270555 发表于 2020-6-10 12:56:18

求助下,ACCESS_MASK到底是什么!

学习Tesla.Angela大佬的无HOOK监控进线程句柄操作课程时用到PobPreOperationCallback回调函数,此回调函数PobPreOperationCallback_PROCESS(PVOID RegistrationContext, POB_PRE_OPERATION_INFORMATION OperationInformation)
        //此回调函数第一个函数是由RegistrationContext决定的,第二个是个结构体,我们就要操作这个结构体
        /*第二个结构体
        typedef struct _OB_PRE_OPERATION_INFORMATION {
        OB_OPERATION                Operation;
        union {
    ULONG Flags;
    struct {
      ULONG KernelHandle : 1;
      ULONG Reserved : 31;
    };
       };
        PVOID                        Object;
        POBJECT_TYPE               ObjectType;
        PVOID                        CallContext;
        POB_PRE_OPERATION_PARAMETERS Parameters;
}        OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION;
        */
经查询POB_PRE_OPERATION_PARAMETERS Parameters为指向OB_PRE_OPERATION_PARAMETERS联合的指针
/*
typedef union _OB_PRE_OPERATION_PARAMETERS {
OB_PRE_CREATE_HANDLE_INFORMATION    CreateHandleInformation;
OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
} OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS;
*/
第一个参数是指向OB_PRE_CREATE_HANDLE_INFORMATION结构,其中包含特定于正在打开句柄信息。
/*
typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION {
ACCESS_MASK DesiredAccess;
ACCESS_MASK OriginalDesiredAccess;
} OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION;
*/
msdn:参数DesiredAccess
一个ACCESS_MASK值,该值指定要授予该句柄的访问权限。默认情况下,该成员等于OriginalDesiredAccess,但是ObjectPreCallback例程可以修改此值以限制所授予的访问。msdn有flag但没有宏定义。
PROCESS_CREATE_PROCESS        创建该流程的新子流程。
PROCESS_CREATE_THREAD        在流程的上下文中创建一个新线程。
PROCESS_DUP_HANDLE        往返于进程上下文的重复句柄,例如通过调用用户模式DuplicateHandle例程。
PROCESS_SET_QUOTA        设置进程的工作集大小,例如通过调用用户模式SetProcessWorkingSetSize例程。
PROCESS_SET_INFORMATION        修改过程设置,例如通过调用用户模式SetPriorityClass例程。
PROCESS_SUSPEND_RESUME        暂停或继续该过程。
PROCESS_TERMINATE        终止该过程,例如通过调用用户模式的TerminateProcess例程。
PROCESS_VM_OPERATION        修改进程的地址空间,例如通过调用用户模式的WriteProcessMemory和VirtualProtectEx例程。
PROCESS_VM_WRITE        写入进程的地址空间,例如通过调用用户模式的WriteProcessMemory例程。
教学中直接定义了#define PROCESS_TERMINATE 0x1,但是我只在wdm.h找到一个flag的宏定义。msdn说是ACCESS_MASK,我查阅文档,也没找到具体的和这几个flag相关的!想弄明白这个问题。这几个flag的宏定义到底是啥!为啥大佬咋知道PROCESS_TERMINATE是0x1的,我咋查不到啊!

Tesla.Angela 发表于 2020-6-11 03:25:34

你需要学会使用MSDN

lzj664270555 发表于 2020-6-11 23:30:04

谢谢,我应该直接msdn查找某一个flag,傻了,刚才回顾了下函数的msdn没找到这个链接,我还在想你怎么找到的,然后随手一搜某一个,就搜到了,我还是愚蠢了,这都没想到。

Tesla.Angela 发表于 2020-6-12 00:59:43

lzj664270555 发表于 2020-6-11 23:30
谢谢,我应该直接msdn查找某一个flag,傻了,刚才回顾了下函数的msdn没找到这个链接,我还在想你怎么找到的 ...

谷歌搜索:关键字 site:msdn.microsoft.com
页: [1]
查看完整版本: 求助下,ACCESS_MASK到底是什么!