![]() |
Code aus Gary Nebbett's Buch
ich hab folgenden code aus gary nebbett's buch...
Code:
aber irgendwie krieg ich den in visual studio .net 2003 einfach nicht zum laufen. könnte mir mal jemand erklären, wie ich das anstelle? er bringt mir da dutzende fehlermeldung. wie geh ich sowas an und was brauche ich, damit das läuft.
#include "ntdll.h"
#include <stdlib.h> #include <stdio.h> int main(int argc, char *argv[]) { if (argc == 1) return 0; ULONG pid = strtoul(argv[1], 0, 0); EnablePrivilege(SE_DEBUG_NAME); HANDLE hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, pid); ULONG n = 0x1000; PULONG p = new ULONG[n]; while (NT::ZwQuerySystemInformation(NT::SystemHandleInformation, p, n * sizeof *p, 0) == STATUS_INFO_LENGTH_MISMATCH) delete [] p, p = new ULONG[n *= 2]; NT::PSYSTEM_HANDLE_INFORMATION h = NT::PSYSTEM_HANDLE_INFORMATION(p + 1); for (ULONG i = 0; i < *p; i++) { if (h[i].ProcessId == pid) { HANDLE hObject; if (NT::ZwDuplicateObject(hProcess, HANDLE(h[i].Handle), NtCurrentProcess(), &hObject, 0, 0, DUPLICATE_SAME_ATTRIBUTES) != STATUS_SUCCESS) continue; NT::OBJECT_BASIC_INFORMATION obi; NT::ZwQueryObject(hObject, NT::ObjectBasicInformation, &obi, sizeof obi, &n); printf(“%p %04hx %6lx %2x %3lx %3ld %4ld “, h[i].Object, h[i].Handle, h[i].GrantedAccess, int(h[i].Flags), obi.Attributes, obi.HandleCount - 1, obi.PointerCount - 2); n = obi.TypeInformationLength + 2; NT::POBJECT_TYPE_INFORMATION oti = NT::POBJECT_TYPE_INFORMATION(new CHAR[n]); NT::ZwQueryObject(hObject, NT::ObjectTypeInformation, oti, n, &n); printf(“%-14.*ws “, oti[0].Name.Length / 2, oti[0].Name.Buffer); n = obi.NameInformationLength == 0 ? MAX_PATH * sizeof (WCHAR) : obi.NameInformationLength; NT::POBJECT_NAME_INFORMATION oni = NT::POBJECT_NAME_INFORMATION(new CHAR[n]); NTSTATUS rv = NT::ZwQueryObject(hObject, NT::ObjectNameInformation, oni, n, &n); if (NT_SUCCESS(rv)) printf(“%.*ws”, oni[0].Name.Length / 2, oni[0].Name.Buffer); printf(“\n”); CloseHandle(hObject); } } delete [] p; CloseHandle(hProcess); return 0; } gruß |
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Windows API / MS.NET Framework API" nach "Programmieren allgemein" verschoben.
Kein Delphi oder BDS-Thema |
Re: Code aus Gary Nebbett's Buch
Zitat:
Grüße Faux |
Re: Code aus Gary Nebbett's Buch
nee also ich bin in visual studio .net 2003 auf Neu->Projekt, Visual c++ Projekte, Win32-Konsolenprogramm.
Im nächsten Dialog dann auf Anwendungseinstellungen und hab MFC und vorcompilierte Header aktiviert. aber der meckert beim einbinden der ntdll.h immer, dass diese doppelte konstrukte usw... enthält. kann das am ddk liegen? |
Re: Code aus Gary Nebbett's Buch
Hast du die ntdll.h im Source-Verzeichnis?
Hast du eine entsprechende Bibliotheks-Datei, falls eine dabei war, eingebunden? Falls du beide Fragen mit "ja" beantworten kannst, dann poste mal die genauen Fehlermeldungen. edit: aha, doppelte Konstrukte? Meinst du Neudefinierung? Wenn ja, dann schreib oben in die Datei
Code:
hinein.
#pragma once
edit2: Ich meine natürlich in die Header-Datei. Falls du sie an zwei verschiedenen Orten inkludierst, wird das das Problem beheben. |
Re: Code aus Gary Nebbett's Buch
Hast du die ntdll.h im Source-Verzeichnis? ja!
Hast du eine entsprechende Bibliotheks-Datei, falls eine dabei war, eingebunden? war keine dabei?! also es kommt zum beispiel: error C2373: 'NtCurrentTeb': Neudefinition; unterschiedliche Modifizierer e:\Programme\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinNT.h(1813): Siehe Deklaration von 'NtCurrentTeb' error C2653: 'NT': Keine Klasse oder Namespace error C2065: 'STATUS_INFO_LENGTH_MISMATCH': nichtdeklarierter Bezeichner error C3861: 'ZwQuerySystemInformation': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden |
Re: Code aus Gary Nebbett's Buch
was bedeutet im quellcode eigentlich immer dieses NT::, so ein Konstruct hab ich eigentlich noch nicht gesehen?!
|
Re: Code aus Gary Nebbett's Buch
Hi Mumu. :hi:
NT:: heißt einfach nur, dass das nachfolgende Dingsda aus dem Namespace NT stammt. Beispiel:
Code:
edit: Wenn du
namespace NT {
int abc(int d) { return d + 1; } } namespace EinAnderer { int main() { return NT::abc(-1); } }
Code:
bzw.
using namespace NT; //(C/C++)
Code:
benutzt, kannst du das NT:: auch weglassen.
using NT; //(C#)
|
Re: Code aus Gary Nebbett's Buch
ok, also ich habs jetzt einigermaßen gepeilt. es funktioniert schon fast. folgende probleme treten noch auf:
error LNK2019: Nicht aufgelöstes externes Symbol '__imp__ZwQueryObject@20', verwiesen in Funktion '_main' error LNK2019: Nicht aufgelöstes externes Symbol '__imp__ZwDuplicateObject@28', verwiesen in Funktion '_main' error LNK2019: Nicht aufgelöstes externes Symbol '__imp__ZwQuerySystemInformation@16', verwiesen in Funktion '_main' ich verwende zum Beispiel ZwQueryObject folgendermaßen:
Code:
NT::ZwQueryObject(hObject, NT::ObjectBasicInfo,&obi, sizeof obi, &n);
und in der datei ntdll.h ist ZwQueryObject so definiert:
Code:
was könnte daran falsch sein? vielen dank schonmal...
namespace NT
{ extern "C" { #pragma warning ( disable: 4005) #include <basetsd.h> #include <ntddk.h> #pragma warning ( default: 4005) NTSYSAPI NTSTATUS NTAPI ZwQueryObject ( IN HANDLE ObjectHandle, IN OBJECT_INFO_CLASS ObjectInformationClass, OUT PVOID ObjectInformation, IN ULONG Length, OUT PULONG ResultLength ); } } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz