-
-
[分享]ACCESS_MASK 定义的编程资料
-
发表于:
2013-8-22 15:02
3976
-
ACCESS_MASK的定义
在DDK中, ACCESS_MASK是一个ULONG
typedef ULONG ACCESS_MASK;
typedef ACCESS_MASK *PACCESS_MASK;
API操作不同对象时, 需要的ACCESS_MASK 也不同.
访问标记 由通用部分 + 附加部分 组成.
通用访问标记
//
// The following are masks for the predefined standard access types
//
#define DELETE (0x00010000L)
#define READ_CONTROL (0x00020000L)
#define WRITE_DAC (0x00040000L)
#define WRITE_OWNER (0x00080000L)
#define SYNCHRONIZE (0x00100000L)
#define STANDARD_RIGHTS_REQUIRED (0x000F0000L)
#define STANDARD_RIGHTS_READ (READ_CONTROL)
#define STANDARD_RIGHTS_WRITE (READ_CONTROL)
#define STANDARD_RIGHTS_EXECUTE (READ_CONTROL)
#define STANDARD_RIGHTS_ALL (0x001F0000L)
#define SPECIFIC_RIGHTS_ALL (0x0000FFFFL)
//
// These are the generic rights.
//
#define GENERIC_READ (0x80000000L)
#define GENERIC_WRITE (0x40000000L)
#define GENERIC_EXECUTE (0x20000000L)
#define GENERIC_ALL (0x10000000L)
附加访问标记 根据操作对象的不同 而不同.
找到了一篇文章, 详细的阐述了 ACCESS_MASK的定义, 包括通用标记和附加标记.
http://blogs.msdn.com/b/openspecification/archive/2010/04/01/about-the-access-mask-structure.aspx
原文附件以后如果下载不到了,可以在本帖下载:
About_the_ACCESS_MASK_Structure.rar
当我们重构或逆向一个工程时, 会遇到一些魔法数. 有关 ACCESS_MASK 的重构和逆向,可以参考本文.
e.g.
重构前:
Status = KernelOpenFile(FileFullPath,
&hFile,
0x100020,
0x80,
1,
1,
0x20);
重构后:
Status = KernelOpenFile(FileFullPath,
&hFile,
SYNCHRONIZE | FILE_EXECUTE,
0x80,
1,
1,
0x20);
重构后,工程中就不会留下一堆的魔法数. 提高了工程的可读性和可维护性.
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!