|
楼主 |
发表于 2011-7-26 21:06:29
|
显示全部楼层
两位前辈可以告诉我这段代码是什么意思吗- void Func()
- {
- BYTE *pReadAddress = NULL;
- ULONG lReadSize = 0;
-
- if ( !NT_SUCCESS(GetReadAddress(&pReadAddress, &lReadSize)) )
- {
-
- return;
- }
- }
- //GetReadAddress函数
- NTSTATUS GetReadAddress(BYTE **ppAddress, ULONG *pSize)
- {
- NTSTATUS status = STATUS_UNSUCCESSFUL;
- if ( g_pReadAddress == NULL )
- {
- status = MyEnumKernelModule(
- "\\??\\c:\\windows\\system32\\Read.sys",
- (ULONG*)g_pReadAddress,
- &g_ReadSize);
- if (!NT_SUCCESS(status))
- {
- DbgPrint("Read is not loaded yet\n");
- return status;
- }
- }
- else
- {
- *ppAddress = g_pReadAddress;
- *pSize = g_ReadSize;
- }
- return STATUS_SUCCESS;
- }
- //MyEnumKernelModule函数
- NTSTATUS MyEnumKernelModule(IN CHAR* str,OUT ULONG *moduleadd,OUT ULONG *modulesie)
- {
- NTSTATUS status = STATUS_SUCCESS;
- ULONG n = 0;
- ULONG i = 0;
- PSYSTEM_MODULE_INFORMATION_ENTRY module = NULL;
- PVOID pbuftmp = NULL;
- ANSI_STRING ModuleName1,ModuleName2;
- BOOLEAN tlgstst= FALSE;
- status = ZwQuerySystemInformation(11, &n, 0, &n);
- pbuftmp = ExAllocatePool(NonPagedPool, n);
- status = ZwQuerySystemInformation(11, pbuftmp, n, NULL);
- module = (PSYSTEM_MODULE_INFORMATION_ENTRY)((PULONG )pbuftmp + 1 );
- RtlInitAnsiString(&ModuleName1,str);
- //
- n = *((PULONG)pbuftmp );
- for ( i = 0; i < n; i++ )
- {
- RtlInitAnsiString(&ModuleName2,(PCSZ)&module->ImageName);
- if (RtlCompareString(&ModuleName1,&ModuleName2,TRUE) == 0)
- {
- // DbgPrint("MyEnumKernelModule:%s:%0X \n",ModuleName2.Buffer,module.Base);
- *moduleadd = (ULONG)module->Base;
- *modulesie = module->Size;
- tlgstst = TRUE;
- break;
- }
- }
- ExFreePool(pbuftmp);
- if (tlgstst == FALSE)
- {
- return FAILED_TO_OBTAIN_FUNCTION_ADDRESSES;
- }
- return status;
- }
复制代码 如果是枚举指定内核模块地址的话 怎么我加载了驱动 and Read.sys 在System32下还总是输出这句呢
DbgPrint("Read is not loaded yet\n"); |
|