Per .net erfragen, wer Datei im Netz geöffnet hat

Guten Tag,
ob eine Datei im Netz geöffnet ist, kann ich herausfinden. Ich wüßte nur gerne, wer der derzeitige User ist. Ziel ist es, den UserNamen oder den RechnerNamen oder dessen IP in meiner .net-Anwendung auszugeben, damit mit dem Betroffenen Rücksprache gehalten werden kann, wann mit dem Schließen zu rechnen ist.
Geht vermutlich irgendwie über API aber wie ???

Freue mich über jeden Tipp.

Moeller59

Hallo!
Das wird nicht ganz einfach, weil für solche betriebssystemnahen Funktionen keine Klassen in der BCL existieren und Du somit jede Menge p/invoke-Aufrufe verwenden musst.
Zudem hat ein kurzes Googlen ergeben, dass man dazu Funktionen aus dem DDK nutzen muss (hpts. aus ntdll.dll, wenn ich das richtig gesehen habe).
Die Ansätze, die ich bisher dazu gesehen habe, scheinen so zu sein, dass man die Handles pro Prozess aufzählen kann, dann den Typ des Handles bestimmen muss (Filehandle, Threadhandle, GDI Handle, …).
Nachdem man dann herausbekommen kann, unter welchem User ein Prozess läuft, weiss man auch, wem letztlich das Handle gehört.
Wie es allerdings bei Zugriffen über das Netz aussieht, kann ich leider nicht genau sagen.

Gruß,
Martin

Guten Tag,
ob eine Datei im Netz geöffnet ist, kann ich herausfinden. Ich
wüßte nur gerne, wer der derzeitige User ist.

Also normalerweiße kannst du über die MMC schonmal unter Freigaben auf dem entsprechenden Server nachsehen Welcher User grad welche datei offen hat.

Ziel ist es, den
UserNamen oder den RechnerNamen oder dessen IP in meiner
.net-Anwendung auszugeben, damit mit dem Betroffenen
Rücksprache gehalten werden kann, wann mit dem Schließen zu
rechnen ist.
Geht vermutlich irgendwie über API aber wie ???

Ich seh schon du willst dir das selber schreiben.

Geht auch ich hab das mal gemacht ich schneid dir einfach mal n stück Programmcode aus meinem alten program aus:

using (DirectoryEntry container = new DirectoryEntry(„WinNT://“ + textBox1.Text + „/LanmanServer“))
{
IADsFileServiceOperations fso = container.NativeObject as IADsFileServiceOperations;
if (fso != null)
{

IADsCollection resources = fso.Resources() as IADsCollection;

foreach (IADsResource resource in resources)
{
try
{

ListViewItem li = new ListViewItem(resource.Path);
li.SubItems.Add(resource.User);
li.SubItems.Add(resource.LockCount.ToString());
listView1.Items.Add(li);

}
catch (System.IO.FileNotFoundException ex)
{
ListViewItem li = new ListViewItem(„Named Pipe kein direkter Dateizugriff“);
listView1.Items.Add(li);

}

}

}

}

Ich denke das sollte als grundlage reichen den rest kann dir google sicher sagen