123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 2009 by the Free Pascal development team
- Misc windows utility functions
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- {$mode objfpc}{$H+}
- unit winutils;
- Interface
- Uses Windows, ComObj, ActiveX;
- // returns True if the currently logged Windows user has Administrator rights. Delphi.about.com
- // From Delphi.about.com with permission, http://delphi.about.com/od/delphitips2007/qt/is_win_admin.htm
- function IsWindowsAdmin: Boolean;
- // Removes Browsers "downloaded" attribute from a file.
- procedure UnBlockFile(const name:String);
- const
- NET_FW_PROFILE2_DOMAIN = 1;
- NET_FW_PROFILE2_PRIVATE = 2;
- NET_FW_PROFILE2_PUBLIC = 4;
- NET_FW_IP_PROTOCOL_TCP = 6;
- NET_FW_IP_PROTOCOL_UDP = 17;
- NET_FW_ACTION_ALLOW = 1;
- // add firewall rule e.g.
- // AddProgramExceptionToFireWall( Application.Title,Application.Title, Application.ExeName, NET_FW_IP_PROTOCOL_TCP, NET_FW_PROFILE2_DOMAIN or NET_FW_PROFILE2_PRIVATE or NET_FW_PROFILE2_PUBLIC);
- procedure AddProgramExceptionToFireWall(Const wsCaption, wsDescription, wsExecutable: WideString; iProtocol,iProfile:Integer);
- // remove firewall rule, e.g. RemoveExceptionFromFW(Application.Title);
- procedure RemoveExceptionFromFW(Const exCaption: WideString);
- implementation
- const
- SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)) ;
- const
- SECURITY_BUILTIN_DOMAIN_RID = $00000020;
- DOMAIN_ALIAS_RID_ADMINS = $00000220;
- function IsWindowsAdmin: Boolean;
- var
- hAccessToken: THandle;
- ptgGroups: PTokenGroups;
- dwInfoBufferSize: DWORD;
- psidAdministrators: PSID;
- g: Integer;
- bSuccess: BOOL;
- begin
- Result := False;
- bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken) ;
- if not bSuccess then
- begin
- if GetLastError = ERROR_NO_TOKEN then
- bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken) ;
- end;
- if bSuccess then
- begin
- GetMem(ptgGroups, 1024) ;
- bSuccess := GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize) ;
- CloseHandle(hAccessToken) ;
- if bSuccess then
- begin
- AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators) ;
- for g := 0 to ptgGroups^.GroupCount - 1 do
- if EqualSid(psidAdministrators, ptgGroups^.Groups[g].Sid) then
- begin
- Result := True;
- Break;
- end;
- FreeSid(psidAdministrators) ;
- end;
- FreeMem(ptgGroups) ;
- end;
- end;
- procedure UnBlockFile(const name:String);
- var f : file;
- begin
- assignfile(f,name+':Zone.Identifier');
- rewrite(f,1);
- truncate(f);
- closefile(f);
- end;
- procedure AddProgramExceptionToFireWall(Const wsCaption, wsDescription, wsExecutable: WideString; iProtocol, iProfile:Integer);
- var
- fwPolicy2 : OleVariant;
- RulesObject : OleVariant;
- NewRule : OleVariant;
- begin
- fwPolicy2 := CreateOleObject('HNetCfg.FwPolicy2');
- RulesObject := fwPolicy2.Rules;
- NewRule := CreateOleObject('HNetCfg.FWRule');
- NewRule.Name := wsCaption;
- NewRule.Description := wsDescription;
- NewRule.Applicationname := wsExecutable;
- NewRule.Protocol := iProtocol;
- NewRule.Enabled := TRUE;
- NewRule.Profiles := iProfile;
- NewRule.Action := NET_FW_ACTION_ALLOW;
- RulesObject.Add(NewRule);
- end;
- procedure RemoveExceptionFromFW(Const exCaption: WideString);
- var
- fwPolicy2 : OleVariant;
- begin
- fwPolicy2 := CreateOleObject('HNetCfg.FwPolicy2');
- fwPolicy2.Rules.Remove(exCaption);
- end;
- end.
|