Windows2000下用户模式的内存扫描( 四 )


第二个参数就指明了我们要进行的操作类型,有三个可选项:
SE_PRIVILEGE_ENABLED 、 SE_PRIVILEGE_ENABLED_BY_DEFAULT 、
SE_PRIVILEGE_USED_FOR_ACCESS。要使能一个权限就指定 Attributes 为
SE_PRIVILEGE_ENABLED。第一个参数就是指权限的类型,是一个 LUID 的
值,LUID 就是指 locally unique identifier,我想 GUID 大家是比较熟
悉的,和 GUID 的要求保证全局唯一不同,LUID 只要保证局部唯一,就是
指在系统的每一次运行期间保证是唯一的就可以了 。另外和 GUID 相同的
一点,LUID 也是一个 64 位的值,相信大家都看过 GUID 那一大串的值,我
们要怎么样才能知道一个权限对应的 LUID 值是多少呢?这就要用到另外
一个 API 函数 LookupPrivilegeValue,其原形如下:
BOOL LookupPrivilegeValue( LPCTSTR lpSystemName , // system name LPCTSTR lpName , // privilege name PLUID lpLuid // locally unique identifier ); 第一个参数是系统的名称,如果是本地系统只要指明为 NULL 就可以了,
第三个参数就是返回 LUID 的指针,第二个参数就是指明了权限的名称,
如“ SeDebugPrivilege ” 。在 Winnt.h 中还定义了一些权限名称的宏,
如:
#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
这样通过这三个函数的调用,我们就可以用 OpenProcess(PROCESS_ALL_ACCESS,FALSE, dwProcessID)来打获得任意进程的句柄,并
且指定了所有的访问权 。
四 总结
用户模式的内存扫描还是具有想当的局限性,它不能完全扫描
Windows2000的全部内存空间 。要对系统空间进行扫描,在Windows2000下,用户模式的应用程序是不能实现的 。要实现对系统空间的扫描,必须
通过工作于核心模式的程序—驱动程序来实现 。

推荐阅读