A C version of this DLL is also available
{************************************************************}
{ }
{ DeployMaster Sample Identity Manager DLL }
{ }
{************************************************************}
library Identity;
uses
Windows, SysUtils;
{$R *.RES}
var
Key: HKey;
// This routine is called after the DLL is loaded.
// It allows it to figure out where the processed information should be stored in the Windows registry.
// CompanyName and AppVersion may be nil, AppName will always have a value.
// The strings must not be modified by the DLL, and their length is arbitrary.
procedure InitIdentity(CompanyName, AppName, AppVersion: PChar); stdcall;
var
ZStr: array[0..255] of Char;
begin
ZStr := 'Software';
if CompanyName <> nil then begin
StrCat(ZStr, '\');
StrCat(ZStr, CompanyName);
end;
StrCat(ZStr, '\');
StrCat(ZStr, AppName);
if RegCreateKeyEx(HKEY_CURRENT_USER, ZStr, 0, nil, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, nil, Key, nil) <> 0 then
Key := 0;
end;
// ValidIdentity() is called when the user clicks on the Proceed button.
// Should return True if the information is valid and the user may proceed.
// If it returns False, the user will have to retry.
// The parameters for items the user is not requested to specify will be nil
// ValidIdentity() is allowed to modify the contents of the strings; e.g. to clear out an invalid registration code
function ValidIdentity(Name, Company, Serial, RegCode: PChar): Bool; stdcall;
begin
Result := True;
end;
// LoadIdentity() is called right before the user is allow to supply his information
// If (another version of) the application is already installed,
// it should set the strings to the previously entered data
// If not, the DLL has a chance to provide default data (e.g. a time-limited trial mode registration key)
// The parameters for items the user is not requested to specify will be nil
procedure LoadIdentity(Name, Company, Serial, RegCode: PChar); stdcall;
var
BufType, BufSize: Integer;
begin
if Key <> 0 then begin
BufSize := 128;
if Name <> nil then RegQueryValueEx(Key, 'Name', nil, @BufType, PByte(Name), @BufSize);
BufSize := 128;
if Company <> nil then RegQueryValueEx(Key, 'Company', nil, @BufType, PByte(Company), @BufSize);
BufSize := 128;
if Serial <> nil then RegQueryValueEx(Key, 'Serial', nil, @BufType, PByte(Serial), @BufSize);
BufSize := 128;
if RegCode <> nil then RegQueryValueEx(Key, 'RegCode', nil, @BufType, PByte(RegCode), @BufSize);
end;
end;
// SaveIdentity() is called after the user clicked the proceed button and ValidIdentity() returned true.
// It should write the data to the Windows registry, so that the application, once installed, can use it.
// The parameters for items the user is not requested to specify will be nil
procedure SaveIdentity(Name, Company, Serial, RegCode: PChar); stdcall;
begin
if Key <> 0 then begin
// Save data
if Name <> nil then RegSetValueEx(Key, 'Name', 0, REG_SZ, Name, StrLen(Name)+1);
if Company <> nil then RegSetValueEx(Key, 'Company', 0, REG_SZ, Company, StrLen(Company)+1);
if Serial <> nil then RegSetValueEx(Key, 'Serial', 0, REG_SZ, Serial, StrLen(Serial)+1);
if RegCode <> nil then RegSetValueEx(Key, 'RegCode', 0, REG_SZ, RegCode, StrLen(RegCode)+1);
// Clean up
RegCloseKey(Key);
end;
end;
exports
// Make our support routines visible to the world
// If we're using Unicode, we need to add W to the names of the exported functions
InitIdentity {$IFDEF UNICODE}name 'InitIdentityW'{$ENDIF},
ValidIdentity {$IFDEF UNICODE}name 'ValidIdentityW'{$ENDIF},
LoadIdentity {$IFDEF UNICODE}name 'LoadIdentityW'{$ENDIF},
SaveIdentity {$IFDEF UNICODE}name 'SaveIdentityW'{$ENDIF};
end.