Để liệt kê các tệp được chia sẻ mở trong máy, bạn có thể sử dụng ADSI (Giao diện dịch vụ Active Directory).
Để sử dụng các giao diện từ delphi bạn phải nhập Active DS loại thư viện
Sau đó truy cập vào giao diện IADsFileServiceOperations
, trong đó có một phương pháp gọi là Resources
phương pháp này trả về một bộ sưu tập với tất cả các chia sẻ mở tài nguyên.
Kiểm tra này mẫu mã
{$APPTYPE CONSOLE}
uses
ActiveDs_TLB,
Variants,
ActiveX,
SysUtils;
function ADsGetObject(lpszPathName:WideString; const riid:TGUID; out ppObject):HRESULT; safecall; external 'activeds.dll';
procedure ListSharedResourcesInUse;
var
FSO : IADsFileServiceOperations;
Resources : IADsCollection;
Resource : OleVariant;
pceltFetched : Cardinal;
oEnum : IEnumvariant;
begin
//establish the connection to ADSI
ADsGetObject('WinNT://./lanmanserver', IADsFileServiceOperations, FSO);
//get the resources interface
Resources := FSO.Resources;
//get the enumerator
oEnum:= IUnknown(Resources._NewEnum) as IEnumVariant;
while oEnum.Next(1, Resource, pceltFetched) = 0 do
begin
Writeln(Format('Resource %s User %s',[Resource.Path,Resource.User]));
Resource:=Unassigned;
end;
end;
begin
try
CoInitialize(nil);
try
ListSharedResourcesInUse;
finally
CoUninitialize;
end;
except
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Writeln('Press Enter to exit');
Readln;
end.
Bạn có muốn làm điều này từ phía máy chủ o từ một máy khách hàng? – RRUZ
Không chắc chắn nếu điều này là chính xác những gì bạn đang tìm kiếm, nhưng [PsFile] của SysInternal (http://technet.microsoft.com/en-us/sysinternals/bb897552) có thể cho bạn biết ai đã mở các tệp trên một máy nhất định. Họ đề cập đến sử dụng một số NET API, mà tôi không quen thuộc với, nhưng nó có thể là một dẫn cho bạn. – eran
@RRUZ Lý tưởng nhất là ứng dụng khách. Tôi không nhớ nếu ứng dụng khách hàng phải chạy một số quá trình updater.exe trên máy chủ. @anan cảm ơn, tôi sẽ kiểm tra. – Wodzu