線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:938
推到 Plurk!
推到 Facebook!

谁来帮我找到新“共享资源”的Buf502.shi502_security_descriptor指针?

尚未結案
LargeWon
一般會員


發表:3
回覆:10
積分:2
註冊:2002-12-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-31 13:51:10 IP:211.162.xxx.xxx 未訂閱
program GetNetShares;    {$APPTYPE CONSOLE}    uses
  Windows,
  SysUtils;    const
  NERR_Success = 0; // Success    type
  NET_API_STATUS = DWORD;
  PShare_Info_0 = ^TShare_Info_0;
  TShare_Info_0 = record
    shi0_netname: PWideChar;
  end;
  PShare_Info_0_Arr = ^TShare_Info_0_Arr;
  TShare_Info_0_Arr = array[0..MaxInt div SizeOf(TShare_Info_0) - 1] of
    TShare_Info_0;
  PShare_Info_1 = ^TShare_Info_1;
  TShare_Info_1 = record
    shi1_netname: PWideChar;
    shi1_type: DWORD;
    shi1_remark: PWideChar;
  end;
  PShare_Info_1_Arr = ^TShare_Info_1_Arr;
  TShare_Info_1_Arr = array[0..MaxInt div SizeOf(TShare_Info_1) - 1] of
    TShare_Info_1;
  PShare_Info_2 = ^TShare_Info_2;
  TShare_Info_2 = record
    shi2_netname: PWideChar;
    shi2_type: DWORD;
    shi2_remark: PWideChar;
    shi2_permissions: DWORD;
    shi2_max_uses: DWORD;
    shi2_current_uses: DWORD;
    shi2_path: PWideChar;
    shi2_passwd: PWideChar;
  end;
  PShare_Info_2_Arr = ^TShare_Info_2_Arr;
  TShare_Info_2_Arr = array[0..MaxInt div SizeOf(TShare_Info_2) - 1] of
    TShare_Info_2;
  PShare_Info_502 = ^TShare_Info_502;
  TShare_Info_502 = record
    shi502_netname: PWideChar;
    shi502_type: DWORD;
    shi502_remark: PWideChar;
    shi502_permissions: DWORD;
    shi502_max_uses: DWORD;
    shi502_current_uses: DWORD;
    shi502_path: PWideChar;
    shi502_passwd: PWideChar;
    shi502_reserved: DWORD;
    shi502_security_descriptor: PSECURITY_DESCRIPTOR;
  end;
  PShare_Info_1004 = ^TShare_Info_1004;
  TShare_Info_1004 = record
    shi1004_remark: PWideChar;
  end;
  PShare_Info_1006 = ^TShare_Info_1006;
  TShare_Info_1006 = record
    shi1006_max_uses: DWORD;
  end;
  PShare_Info_1501 = ^TShare_Info_1501;
  TShare_Info_1501 = record
    shi1501_reserved: DWORD;
    shi1501_security_descriptor: PSECURITY_DESCRIPTOR;
  end;    function NetShareEnum(servername: PWideChar; level: DWORD; var buf: Pointer;
  prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD; var
  resume_handle: DWORD): NET_API_STATUS; stdcall; external 'netapi32.dll';    function NetShareGetInfo(servername: PWideChar; netname: PWideChar; level:
  DWORD; var buf: Pointer): NET_API_STATUS; stdcall; external 'netapi32.dll';    function EnableSecurityNamePrivilege(Enable: Boolean): Boolean;
var
  hProcess, hToken: THandle;
  //hTokenPointer: PHANDLE;//Pointer;//THandle;
  tpNew: TOKEN_PRIVILEGES;      TokenPrivileges: TTokenPrivileges;
  ReturnLength: DWORD;
begin
  Result := False;
  hProcess := GetCurrentProcess();
  //hTokenPointer := @hToken;
  //if not OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, hTokenPointer) then Exit;
  if not OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, hToken) then Exit; 
  if not LookupPrivilegeValue(nil, 'SeSecurityPrivilege',
    tpNew.Privileges[0].Luid) then Exit;
  if not Enable then
    tpNew.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
  else
    tpNew.Privileges[0].Attributes := 0;
  tpNew.PrivilegeCount := 1;      ReturnLength := 0;
  TokenPrivileges.PrivilegeCount := 0;
  //TokenPrivileges := tpNew;
  Result := AdjustTokenPrivileges(hToken, False, tpNew, 0, TokenPrivileges,
    ReturnLength); //ÕâÀï×Ü·µ»ØFalse
  //  if not Result then RaiseLastWin32Error;
end;    function NetApiBufferFree(P: Pointer): NET_API_STATUS; stdcall; external
  'netapi32.dll';
var
  Server: PWideChar;
  Buffer, Loop: PShare_Info_0;
  Buf502: PShare_Info_502;
  NetResult: DWORD;
  entriesread: DWORD;
  totalentries: DWORD;
  resume_handle: DWORD;
  I: Integer;
begin
  if not EnableSecurityNamePrivilege(True) then ; //Exit;据《Win2000内幕》讲要先提升本进程的权力
  if (ParamCount = 0) then
  begin
    Server := nil;
  end
  else
  begin
    Server := PWideChar(WideString(ParamStr(1)));
  end;
  entriesread := 0;
  totalentries := 0;
  resume_handle := 0;
  NetResult := NetShareEnum(Server, 0, Pointer(Buffer), DWORD(-1), entriesread,
    totalentries, resume_handle);
  if (NetResult = NERR_Success) then
  begin
    Loop := Buffer;
    WriteLn('Entries read: ', entriesread);
    for I := 1 to entriesread do
    begin
      WriteLn('Name: ', string(Loop.shi0_netname));
      try
        NetResult := NetShareGetInfo(Server, Loop.shi0_netname, 502,
          Pointer(Buf502));
        if (NetResult = NERR_Success) then
        begin
          WriteLn('* Net name: ', string(Buf502.shi502_netname));
          WriteLn('* Type: ', Buf502.shi502_type);
          WriteLn('* Remark: ', string(Buf502.shi502_remark));
          WriteLn('* Permissions: ', Buf502.shi502_permissions);
          WriteLn('* Max uses: ', Buf502.shi502_max_uses);
          WriteLn('* Current uses: ', Buf502.shi502_current_uses);
          WriteLn('* Path: ', string(Buf502.shi502_path));
          WriteLn('* Password: ', string(Buf502.shi502_passwd));
          WriteLn('* Reserved: ', Buf502.shi502_reserved);
          if Buf502.shi502_security_descriptor = nil then
            WriteLn('* shi502_security_descriptor: ', '怎么还有找不到的?!')
          else
            WriteLn('* shi502_security_descriptor: ', '找到了')//谁来找出所有的共享文件夹的shi502_security_descriptor
        end
        else
        begin
          WriteLn('* Error: ', SysErrorMessage(NetResult));
        end;
        NetApiBufferFree(Buf502);
      except on E: Exception do WriteLn('* Error: ', E.Message);
      end;
      WriteLn;
      Inc(Loop);
    end;
    NetApiBufferFree(Buffer);
  end;
  readln;
end.    
如果还没明白我的意思就请运行一下这段代码就明白了。 环境:Win2000专业版 Delphi7 發表人 - LargeWon 於 2004/05/31 14:29:31
------
老王
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-17 18:23:35 IP:210.66.xxx.xxx 未訂閱
在Windows.pas type   PSECURITY_DESCRIPTOR = Pointer;    
if @Buf502.shi502_security_descriptor = nil then
            WriteLn('* shi502_security_descriptor: ', '怎么还有找不到的?!')
          else
            WriteLn('* shi502_security_descriptor: ', '找到了')//谁来找出所有的共享文件夹的shi502_security_descriptor
所以我試著加了@,就可以找到了,不知這樣是否正確? Ian
LargeWon
一般會員


發表:3
回覆:10
積分:2
註冊:2002-12-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-23 10:02:44 IP:211.162.xxx.xxx 未訂閱
感谢l630521回复! 问题还未解决,望各位帮助! 老王
------
老王
系統時間:2024-05-15 14:33:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!