找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5361|回复: 3

求助下,ACCESS_MASK到底是什么!

[复制链接]

1

主题

12

回帖

0

精华

铜牌会员

积分
44
发表于 2020-6-10 12:56:18 | 显示全部楼层 |阅读模式
学习Tesla.Angela大佬的[4-5]无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的,我咋查不到啊!

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2020-6-11 03:25:34 | 显示全部楼层

1

主题

12

回帖

0

精华

铜牌会员

积分
44
 楼主| 发表于 2020-6-11 23:30:04 | 显示全部楼层
谢谢,我应该直接msdn查找某一个flag,傻了,刚才回顾了下函数的msdn没找到这个链接,我还在想你怎么找到的,然后随手一搜某一个,就搜到了,我还是愚蠢了,这都没想到。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2020-6-12 00:59:43 | 显示全部楼层
lzj664270555 发表于 2020-6-11 23:30
谢谢,我应该直接msdn查找某一个flag,傻了,刚才回顾了下函数的msdn没找到这个链接,我还在想你怎么找到的 ...

谷歌搜索:
关键字 site:msdn.microsoft.com
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表