{
SC_HANDLE hManager;
DWORD dType, dState, dBytes, dResume, dName, i;
PW2K_SERVICES pws = NULL;
if ((pws = w2kMemoryCreate (W2K_SERVICES_)) != NULL)
{
pws->dEntries = 0;
pws->dBytes = 0;
pws->dDisplayName = 0;
pws->dServiceName = 0;
if ((fDriver || fWin32) && (fActive || fInactive))
{
if ((hManager = w2kServiceConnect ()) != NULL)
{
dType = (fDriver ? SERVICE_DRIVER : 0) |
(fWin32 ? SERVICE_WIN32 : 0);
dState = (fActive && fInactive
? SERVICE_STATE_ALL
: (fActive
? SERVICE_ACTIVE
: SERVICE_INACTIVE));
dBytes = pws->dBytes;
while (pws != NULL)
{
pws->dEntries = 0;
pws->dBytes = dBytes;
pws->dDisplayName = 0;
pws->dServiceName = 0;
dResume = 0;
if (EnumServicesStatus (hManager, dType, dState,
pws->aess, pws->dBytes,
&dBytes, &pws->dEntries,
&dResume))
break;
dBytes= pws->dBytes;
pws = w2kMemoryDestroy (pws);
if (GetLastError () != ERROR_MORE_DATA) break;
pws = w2kMemoryCreate (W2K_SERVICES_dBytes);
}
w2kServiceDisconnect (hManager);
}
else
{
pws = w2kMemoryDestroy (pws);
}
}
if (pws != NULL)
{
for (i = 0; i < pws->dEntries; i)
{
dName = lstrlen (pws->aess [i].lpDisplayName);
pws->dDisplayName = max (pws->dDisplayName, dName);
dName = lstrlen (pws->aess [i].lpServiceName);
pws->dServiceName = max (pws->dServiceName, dName);
}
}
}
return pws;
}
列表 3-11. 枚举服务 / 驱动程序
w2kServiceList() 需要四个逻辑类型的参数,以确定要返回的列表的内容 。通过 fDriver 和 fWin32 参数,你可以分别选择是否包含驱动程序或服务 。如果这两个参数都为 TRUE ,那么返回的列表将同时包含驱动和服务 。fActive 和 fInactive 标志用于控制加于列表上的状态过滤器 。。fInactive 参数选择剩余的模块,也就是说,这些模块已经加载但已经停止运行 。如果所有的四个参数都为 FALSE ,函数返回的 W2K_SERVICES 结构将包含一个空的状态数组 。光盘中的示例代码包含一个简单的服务 / 驱动浏览器,它被设计为 Win32 控制台模式,并依赖于 w2k_lib.dll 中的 w2kServiceList()。它使用 W2K_SERVICES 结构(参见 列表 3-11 )中的 dDisplayName 和 dServiceName 成员来为所有的名称选择合适的水平对齐方式 。你可以在光盘的 srcw2k_svc 目录下找到此工具的源代码 。其可执行文件对应光盘中的 binw2k_svc.exe。示列 3-4 列出了在我的机器上运行该工具,列出的所有活动的内核驱动程序(使用命令选项 /drivers /active ) 。
【4 《Undocumented Windows 2000 Secrets》翻译 --- 第三章】在下一章中,我们将开始开发一个可实际工作的内核驱动程序,它会侦测内核使用的内存,并且会 Crack 基本的内存管理数据结构 。这个工程将伴随你阅读第 4 、 5 和 6 章,在每一章中,该驱动程序都会被加强 。最后将得到一个通用的 Windows 2000 Kernel Spy。
推荐阅读
- 1 《Undocumented Windows 2000 Secrets》翻译 --- 第二章
- 浅谈非系统管理员用户本地登录Windows 2000 server
- 同床异梦秋瓷炫多少期
- Windows 2000进程细述
- 《Undocumented Windows 2000 Secrets》翻译 --- 3
- Windows2000的日志文件详述及删除方法
- 命令篇 Windows 2000/XP的CMD命令教程 (3)
- 2 《Undocumented Windows 2000 Secrets》翻译 --- 第三章
- 如何安装/卸载 Windows 2000 的公钥证书颁发机构
- 使用 Windows 2000 备份程序备份和还原系统状态
