This is the first release of the new JEDI Windows API (JWA) and JEDI Windows Security Code Library (JWSCL).
JWA is known as the JEDI Windows API header conversions. JWA can be compiled into one jwaWindows unit. There is no more need to add dozens of different units into the uses statement and the smart-linking mechanism of Delphi does the rest for you. However single units can also be used!
JWSCL is a collection of classes to make programming Windows Security a whole lot easier. It uses JWA excessively.
JWSCL makes use of the following things easier:
- Detect Windows version, version checks
- Token
- Impersonation
- User login
- SID
- Access Control List
- Security Descriptor
- Owner, Group, DACL, SACL
- WindowStation
- Desktop
- LSA
- Rights mapping
- Secured object e.g. files, registry (+inheritance), and generic window
handles - Credentials (Login Dialog)
- Encryption (MS Crypt API)
- Well-known SIDs
- Privileges
- Security Dialogs (security tab sheet, like in windows explorer file
security dialog) - Terminal Sessions
- Unicode + ANSI
- Vista Elevation
- Vista Integrity Level
Download (JWSCL download contains JWA already):
http://sourceforge.net/project/showfiles.php?group_id=121894
(JWA and JWSCL downloads are an image of the Subversion repository, so you can transparently update them later using an SVN client)
As a simple demonstration this code shows how to get the maximum possible rights to access a file.
program ReadFileSecurity;
{$APPTYPE CONSOLE}
uses
SysUtils,
Dialogs,
Controls,
JwaWindows,
JwsclTypes,
JwsclExceptions,
JwsclConstants,
JwsclMapping,
JwsclVersion,
JwsclProcess,
JwsclSid,
JwsclAcl,
JwsclCredentials,
JwsclDescriptor,
JwsclToken,
JwsclKnownSid,
JwsclAccounts,
JwsclSecureObjects,
JwsclStrings;
function CheckAccessToFile(
DesiredAccess: DWORD; const FileName: WideString): Boolean;
var FileObject : TJwSecureFileObject;
begin
FileObject := TJwSecureFileObject.Create(FileName);
try
result := FileObject.AccessCheck(DesiredAccess);
finally
FileObject.Free;
end;
end;
function CheckMaximumAccessToFile(const FileName: WideString): DWORD;
var FileObject : TJwSecureFileObject;
PrivilegeSet: TJwPrivilegeSet;
AccessStatus: boolean;
begin
FileObject := TJwSecureFileObject.Create(FileName);
try
FileObject.AccessCheck(
MAXIMUM_ALLOWED,//DesiredAccess: TJwAccessMask;
PrivilegeSet,//out PrivilegeSet: TJwPrivilegeSet;
result,//out GrantedAccess: TJwAccessMask;
AccessStatus,//out AccessStatus: boolean;
nil//const ClientToken: TJwSecurityToken = nil);
);
finally
PrivilegeSet.Free;
FileObject.Free;
end;
end;
var AccessMask : DWORD;
FileName : String;
begin
FileName := ParamStr(1);
if Length(FileName) = 0 then
FileName := ParamStr(0);
writeln('Check access for '+FileName);
try
if CheckAccessToFile(FILE_ALL_ACCESS,FileName) then
writeln('Full control allowed')
else
writeln('Full control denied');
except
On E : Exception do
Writeln(E.Message);
end;
try
AccessMask := CheckMaximumAccessToFile(FileName);
writeln('Maximum access possible:
['+TJwSecurityFileMapping.MapAccessMaskToString(AccessMask)+']');
except
On E : Exception do
Writeln(E.Message);
end;
Writeln('[Hit return]');
readln;
end.
Consider how many lines you would had to write without the classes.
Author of the JEDI Windows Security Code Library is Chris Wimmer. Thanks for this great contribution to the Delphi-world, Chris!
// Oliver
Vielleicht könnte man EDA erweitern, so dass auch Sicherheitsrelevantes angezeigt wird und geändert werden kann 😀
Wäre mal wieder Zeit, dass eine Korifäe zurück zu Delphi kehrt.
Come BACK!