取消引用“ char *”时崩溃,无法比较字符串

时间:2019-05-26 21:47:55

标签: c kernel driver

我整天都在努力解决驱动程序问题,问题似乎是如果我取消引用我的任何一个字符串(ProcessName,attachmentName),它将导致我的驱动程序和操作系统崩溃。

edit:我忘记发布char *取消引用对strcmp返回NULL或什么都没有,这就是它崩溃或似乎崩溃的原因。它是由STATUS_ACCESS_VIOLATION ntstatus引起的。希望有帮助。

我仔细检查了我在Google上可以找到的与字符串比较,多字节vs Unicode编码,字符串类型之间的差异有关的所有内容,最终使我意识到,如果我取消引用变量会导致崩溃。 / p>

// the callback, it is where I am trying to compare the strings
PCREATE_PROCESS_NOTIFY_ROUTINE Callback(HANDLE ParentId, HANDLE ProcessId, BOOLEAN Create) {
    if (Create == TRUE) {
        PEPROCESS Process;

        if (NT_SUCCESS(PsLookupProcessByProcessId(ProcessId, &Process))) {
            LPSTR ProcessName = (LPSTR)PsGetProcessImageFileName(Process);
            PVOID ProcessBase = PsGetProcessSectionBaseAddress(Process);
            UINT64 VirtualSize = (UINT64)((PCUCHAR)Process + 0x338);
            UINT64 PeakVirtualSize = (UINT64)((PCUCHAR)Process + 0x330);

            //if (attachedName) {
                //if (!strcmp(ProcessName, attachedName)) {
                    DbgPrintEx(0, 0, "ParentId: %i | ProcessId: %i | ProcessName: %s | ProcessBase: 0x%p | VirtualSize: 0x%X | PeakVirtualSize: 0x%X", ParentId, ProcessId, *ProcessName, ProcessBase, VirtualSize, PeakVirtualSize);
                //}
            //}

            ObDereferenceObject(Process);
        }
    }
}

// the case in a switch statement I call to be able to find a specific process in the callback

case IO_CTL_ATTACH:
    attachedName = sent->attach.exeName;
    DbgPrintEx(0, 0, "%s", attachedName);
        return STATUS_SUCCESS;

如果我删除取消引用,则预期结果应该是单个字符或从“ ProcessName”的取消引用中打印出来的任何内容,不会发生崩溃。

我通过一条调试消息发现了所有这些问题,这些消息将我转发到nt!strcmp + 4C,这是它取消引用String1或第一个输入的地方。

0 个答案:

没有答案