Autor Beitrag
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Di 02.09.08 13:27 
Also bei mir geht es: Win XP Home SP3.
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Di 02.09.08 14:27 
user profile iconLuckie hat folgendes geschrieben:
Ich habe das Programm jetzt zweimal gestartet und jedes mal erschien nur der Prozess im Taskmanager aber kein Programmfenster. System ist Windows XP SP2.


Ich habe das selbe OS, bei mir läufts..... mhhhh, könnte es sein das es vll doch Admin-Rechte benötigt?
Ansonsten habe ich keine Ahnung :nixweiss:

user profile icondelphi10 hat folgendes geschrieben:
Habe ich gerade eben laufenlassen. Also, da ist noch nicht alles richtig. Er zeigt mir nur teilweise die Laufwerksbezeichner an und die sind leider falsch. Es wird z. Bspl. "F:\name..." ausgegeben, das ist aber bei mir ein zur Zeit leeres DVD-Laufwerk.
Kannst ja bei Gelegenheit noch mal eine Analyse machen. Danke.
cu delphi10

Edit 2.9.08: O.g. Fehler treten nur unter W2K auf. Unter XPSP2 werden die Laufwerksbezeichner richtig angezeigt. Gerade eben getestet.


Das ist mein Code, habe sonst keine Idee wie man "\Device\HarddiskVolume1\" in den passenden Laufwerksbuchstaben umwandeln könnte...
Die Funktion geht davon aus das 1=C ist und 2=D usw...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
function TForm1.ConvertDrive(s:String):String;
const
  ABC= 'CDEFGHIJKLMNOPQRSTUVWXYZ';
var
  s2:String;
  bc: Integer;
  o: Integer;
begin
  Result := s;
  s2 := StringReplace(s, '\Device\HarddiskVolume''', [rfReplaceAll]);
  bc := pos('\', s2)-1;
  if bc <= 0 then
    Exit;
  try
    o := StrToInt(Copy(s2, 1, bc));
  except
    Exit;
  end;
  Delete(s2, 1, bc);
  if (o>0and (o<=Length(ABC)) then
    Result := ABC[o]+':'+s2 ;
end;


MfG

_________________
Debuggers don't remove bugs, they only show them in slow-motion.
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Di 02.09.08 16:50 
user profile iconSAiBOT hat folgendes geschrieben:

Die Funktion geht davon aus das 1=C ist und 2=D usw...


Sollte es nicht mit A beginnen?
1=A 2=B 3=C 4=D. Dieser Versatz könnte die Fehlanzeige bei mir erklären.
Probiers doch mal mit meiner Funktion .GetLogicalDrivesStr(const NotAssigned: Boolean = FALSE): String;
cu delphi10

_________________
Salus populi suprema lex esto
wirbeldelphi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 29



BeitragVerfasst: Di 02.09.08 18:16 
Noch ne Info: wenn ich die exe als Administrator laufen lasse (Rechtsklick - Ausführen als) bekomme ich statt Null wenigstens zwei Filehandles angezeigt, allerdings nur die vom Prozeß FileUnlocker selbst...

_________________
Ich bin keine Signatur - ich putz hier nur.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 02.09.08 20:22 
Zu Hause geht es wunderbar, obwohl gleiches System. Natürlich ist andere Software installiert und andre Hardware. Eventuell kommt im Büro irgendein Treiber oder sont was in die Quere. Ich werde es morgen noch mal probieren.

Und danke für die PN. An den zitierten Beitrag kann ich mich gar nicht erinnern. Allerdings ging es nicht um "Steine in den Weg legen", sondern es war meine meinung zu solchen Programmen, wenn sie rücksichtslos eingesetzt werden.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 03.09.08 11:32 
Version: 0.0.3
Betriebssystem: Windows 2000 SP4
Problem: Keine GUI

Keine Ahnung, was da nicht läuft. Auf jeden Fall sehe ich kein Fenster, rein gar nichts. Der Prozess bleibt vorhanden. Vielleicht solltest du eine Logdatei hinzufügen, die Startvorgänge loggt.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 03.09.08 12:12 
Ich habs gefunden.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
function GetFileNameByHandle(FileHandle: THandle): string;
var
  FileNameInfo      : TFileNameInformation;
  ObjectNameInfo    : TObjectNameInformation;
  IoStatusBlock     : TIOStatusBlock;
  res, dwReturn     : DWORD;
begin
  result := '';
  Writeln(FileHandle);
  res := NtQueryInformationFile(FileHandle, @IoStatusBlock, @FileNameInfo,
    SizeOf(FileNameInfo.FileName), FileNameInformation);
  if res = STATUS_SUCCESS then
  begin
    res := NtQueryObject(FileHandle, ObjectNameInformation,
      @ObjectNameInfo, SizeOf(ObjectNameInfo.Name.Buffer), @dwReturn);
    if res = STATUS_SUCCESS then
    begin
      SetLength(result, MAX_PATH);
      SetLength(result, WideCharToMultiByte(CP_ACP, 0,
        @ObjectNameInfo.Name.Buffer[ObjectNameInfo.Name.MaximumLength -
        ObjectNameInfo.Name.Length],
          ObjectNameInfo.Name.Length div SizeOf(WideChar),
        @result[1], MAX_PATH, nilnil));
    end
    else
    begin
      SetLength(result, MAX_PATH);
      SetLength(result, WideCharToMultiByte(CP_ACP, 0,
        @FileNameInfo.FileName[0], FileNameInfo.FileNameLength div
        SizeOf(WideChar), @result[1], MAX_PATH, nilnil));
    end;
  end;
end;


Das ist der schuldige Code. Wenn ich den Aufruf dieser Funktion auskommentieren läuft er durch, ansonsten bleibt er "hängen". Erklärung von Nico:
"im Prinzip wartet die Anfrage im Kernel bis das Objekt reagiert - was bei asynchronen Pipes unendlich lange dauern kann"
Der Code wartet sich also an dieser Stelle zu Tode.
Lösung von Nico:
"Die sauberste Lösung ist ein Treiber, der selbst ein IRP zusamelstellt und an das Objekt schickt"
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Do 04.09.08 16:33 
Ja ich bin dabei mir das nötige Hintergrundwissen beizubringen um dies mit einem Treiber zu ermöglichen.

Für die Leute die sich für dieses Thema interessieren:
Ich habe Sourcecode gefunden, in dem mit einer Delphi-Anwendung und einem C-Treiber ALLE Handles angezeigt werden (Nicht nur Filehandles).
Diese arbeitet im Ring0 (Kernelmode) und listet sogar die Systemprozesse.
(Source im Anhang; ich glaube es stammt von www.rootkit.com )

Ich werde dieses Projekt erstmal auf Eis legen, bis ich die elegantere Methode über den Treiber gehen kann.

MfG :wave:

_________________
Debuggers don't remove bugs, they only show them in slow-motion.


Zuletzt bearbeitet von SAiBOT am Sa 13.09.08 13:36, insgesamt 1-mal bearbeitet
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 04.09.08 16:46 
Jupp, ein Treiber ist die einzige saubere Möglichkeit. Allerdings wohl auch nicht so ganz einfach. Man benötigt eben das DDK mit den Headern und den Compiler.

Eventuell wäre es im ersten Schritt einfachher einen bestehenden Treiber zu nutzen. Man müsste eben nur rausfinden, wie man mit einem Treiber kommuniziert. Im nächsten Schritt könnte man dann überlegen selber einen zu programmieren.

@SAiBOT: Hast du dir meine Änderungen mal angeguckt?
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Do 04.09.08 16:50 
user profile iconLuckie hat folgendes geschrieben:
Jupp, ein Treiber ist die einzige saubere Möglichkeit. Allerdings wohl auch nicht so ganz einfach. Man benötigt eben das DDK mit den Headern und den Compiler.

Eventuell wäre es im ersten Schritt einfachher einen bestehenden Treiber zu nutzen. Man müsste eben nur rausfinden, wie man mit einem Treiber kommuniziert. Im nächsten Schritt könnte man dann überlegen selber einen zu programmieren.

@SAiBOT: Hast du dir meine Änderungen mal angeguckt?


Bin gerade am durchgucken, der Callback ist eine sehr gute Idee :idea:

_________________
Debuggers don't remove bugs, they only show them in slow-motion.