포인터 연산으로 하루를 버리고... 얻어낸 ProcessInfo_LegacyDrv.zip 소스 코드들...
중요한 포인트를 찝어 보자면...
//get hided process list///////////////////////////////////////////////////
pProcessListHead =
(PLIST_ENTRY)(&pDeviceExtension->pHidedProcessListHead.Flink);
pProcessList = pProcessListHead;
//trace process
for(; i<ProcessCount; i++)
{
if(pProcessList->Flink == pProcessListHead) break;
pProcess = (((PUCHAR)pProcessList) - OFFSET_LIST_ENTRY);
(pProcessListPool+i)->ProcessKeyInfo.UniqueProcessId =
*((PULONG)(pProcess + OFFSET_UNIQUE_PROCESS_ID));
RtlCopyMemory(
(pProcessListPool + i)->ProcessKeyInfo.ImageFileName,
(pProcess + OFFSET_IMAGE_FILE_NAME),
16);
(pProcessListPool + i)->PStatus = STATUS_HIDED;
CopiedBytes += sizeof(PROCESSINFOQUERY);
pProcessList = pProcessList->Flink;
}
요런 루틴에서 *(주소+i)하면 배열에서 Arr[index+i]라는걸 깜빡해서
*(주소+sizeof(구조체 크기)*i) 요런식으로 계산해서 엉망 진창인 코드가 나왔었다는거...
(계속, 메모리 액세스 바이올레이션... 이런소리가 나오더라..- _;)


덧글
승네군 2008/01/24 14:04 # 답글
쳇.. 위에 올린 소스는 포인터 연산에 문제 있음. (소스 복사하거나 참조하여 쓰지 말것)
WERT 2008/01/27 20:24 # 답글
쿨럭.. 괄호와 요상한 구조체만 보면 혼미..
승네군 2008/01/28 08:57 # 삭제 답글
신비함을 넘어서서 변태스러운 포인터의 세계 - _-
나쯔 2008/02/11 15:39 # 답글
느무 복잡해... 그냥 남이 짠 소스 그대로 배껴쓸래.
승네군 2008/02/11 20:12 # 삭제 답글
동감이얌 -0-...만들어 놓고 보니.. 인터넷에 널려있더라는거.. 크아아!!