diff --git a/KernelLibrary/SysMon.cpp b/KernelLibrary/SysMon.cpp index acbef44..3da8364 100644 --- a/KernelLibrary/SysMon.cpp +++ b/KernelLibrary/SysMon.cpp @@ -538,6 +538,10 @@ bool EnumObCallbackNotify(POBJECT_TYPE objectType,ULONG callbackListOffset,ObCal POB_CALLBACK_ENTRY callbackEntry = nullptr; ULONG count = 0; + if (callbackListOffset == -1) { + return false; + } + if (!objectType) { return false; } @@ -576,7 +580,12 @@ LONG GetObCallbackCount(POBJECT_TYPE objectType, ULONG callbackListOffset) { return count; } + if (callbackListOffset == -1) { + return count; + } + callbackListHead = (PLIST_ENTRY)((PUCHAR)objectType + callbackListOffset); + nextEntry = callbackListHead->Flink; while (nextEntry != callbackListHead) { diff --git a/WinArk/KernelNotifyTable.cpp b/WinArk/KernelNotifyTable.cpp index f112e85..c23f59e 100644 --- a/WinArk/KernelNotifyTable.cpp +++ b/WinArk/KernelNotifyTable.cpp @@ -387,7 +387,7 @@ LRESULT CKernelNotifyTable::OnRemove(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /* auto& p = m_Table.data.info[selected]; CString text; - text.Format(L"ÒÆ³ý»Øµ÷£º%p?", p.Routine); + text.Format(L"Remove notify£º%p?", p.Routine); if (AtlMessageBox(*this, (PCWSTR)text, IDS_TITLE, MB_ICONWARNING | MB_OKCANCEL | MB_DEFBUTTON2) == IDCANCEL) return 0; @@ -413,12 +413,20 @@ LRESULT CKernelNotifyTable::OnRemove(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /* data.Type = NotifyType::ProcessObjectNotify; data.Address = p.Address; data.Offset = SymbolHelper::GetKernelStructMemberOffset("_OBJECT_TYPE", "CallbackList"); + if (data.Offset == -1) { + AtlMessageBox(*this, L"Please delete the ntoskrnl.pdb, then launch the WinArk again", IDS_TITLE, MB_ICONWARNING | MB_OK | MB_DEFBUTTON2); + return 0; + } break; case CallbackType::ThreadObPostOperationNotify: case CallbackType::ThreadObPreOperationNotify: data.Type = NotifyType::ThreadObjectNotify; data.Address = p.Address; data.Offset = SymbolHelper::GetKernelStructMemberOffset("_OBJECT_TYPE", "CallbackList"); + if (data.Offset == -1) { + AtlMessageBox(*this, L"Please delete the ntoskrnl.pdb, then launch the WinArk again", IDS_TITLE, MB_ICONWARNING | MB_OK | MB_DEFBUTTON2); + return 0; + } break; case CallbackType::RegistryNotify: