NtQueryDirectoryFile Hook -- explorer hängt beim Dateien Umbenennen trozt minimaler änderung
-
Hi Leute,
ja ich bins schonwieder
Diesmal gehts um einen NtQueryDirectoryFile Hook.
Er funktioniert an sich schon wie er soll,allerdings hängt sich der explorer immer auf wenn ich versuche eine Datei umzubenennen...
Die originale Funktion befindet sich @new_adress.
Die angehängteFunktion wird statt der originalen aufgerufen
Lasse ich die while(1) Schleife weg geht alles
Schon mal vielen Dank

XalonDWORD WINAPI instead_call(HANDLE a,HANDLE b,PIO_APC_ROUTINE c,PVOID d,PIO_STATUS_BLOCK e,PVOID f,ULONG g,FILE_INFORMATION_CLASS h,BOOLEAN i,PUNICODE_STRING j,BOOLEAN k) { char* cbuf = (char*)f; //ruft ori funktion auf DWORD back = new_adress(a,b,c,d,e,f,g,h,i,j,k); int index = 0; if(h == 3) // FILE_INFORMATION_CLASS == FILE_BOTH_DIRECTORY_INFORMATION { FILE_BOTH_DIRECTORY_INFORMATION* info; // Lass ich die Schleife weg geht alles o.O while(1) { info = (FILE_BOTH_DIRECTORY_INFORMATION *)&cbuf[index]; if (info->NextEntryOffset == 0) break; index += info -> NextEntryOffset; } } return back; }
-
Du darfst nicht vergessen, dass "NtQueryDirectoryFile ()" eine undokumentierte Funktion ist.*
Niemand* (ausser der "Erschaffer"
) weiss, warum, wie und mit welchen Parametern der Explorer "NtQueryDirectoryFile ()" aufruft wenn eine Datei umbenannt wird.Lass Dir "NextEntryOffset" ausgeben und prüfe, ob
if (info->NextEntryOffset == 0) break;in so einem Fall eine geeignete Abbruchbedingung ist.
-
Da die Funktion undokumentiert ist, vermute ich mal, dass Deine größe von "FILE_BOTH_DIRECTORY_INFORMATION" nicht stimmt (da sich diese ja mit *jedem* Hotfix, SP ändern kann)!
Warum verwendest Du nicht FindFirstChangeNotification?
-
Vielleicht hilft dir ja diese Seite: http://rootkit.com/newsread.php?newsid=36
-
Ah vielen Dank für eure Hilfe

merker hatte Recht,scheinbar wird NextEntryOffset beim Umbenennen nicht auf 0 gesetzt.Naja Undokumentiert halt

Habs jetzt so gelöst:
//g = BufferLength if(index > g) break;mfg,
Xalon