123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 2006 by the Free Pascal development team.
- Contains missing wince functions present in win32 api
- 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.
- **********************************************************************}
- {
- *What should contain this file*
-
- functions missing on wince api
- }
- {$ifdef read_interface}
- function LoadLibraryA(lpLibFileName:LPCSTR):HINST;
- function RegCreateKeyExA(hKey:HKEY; lpSubKey:LPCSTR; Reserved:DWORD; lpClass:LPSTR; dwOptions:DWORD;samDesired:REGSAM; lpSecurityAttributes:LPSECURITY_ATTRIBUTES; var hkResult: HKEY; lpdwDisposition:LPDWORD):LONG;
- function RegDeleteKeyA(hKey:HKEY; lpSubKey:LPCSTR):LONG;
- function RegDeleteValueA(hKey:HKEY; lpValueName:LPCSTR):LONG;
- function RegEnumKeyExA(hKey:HKEY; dwIndex:DWORD; lpName:LPSTR; var cbName:DWORD; lpReserved:LPDWORD;lpClass:LPSTR; lpcbClass:LPDWORD; lpftLastWriteTime:PFILETIME):LONG;
- function RegEnumValueA(hKey:HKEY; dwIndex:DWORD; lpValueName:LPSTR; var cbValueName: DWORD; lpReserved:LPDWORD;lpType:LPDWORD; lpData:pointer; lpcbData:LPDWORD):LONG;
- function RegQueryValueExA(hKey:HKEY; lpValueName:LPCSTR; lpReserved:LPDWORD; lpType:LPDWORD; lpData:pointer;lpcbData:LPDWORD):LONG;
- function RegQueryInfoKeyA(hKey:HKEY; lpClass:LPSTR; lpcbClass:LPDWORD; lpReserved:LPDWORD; lpcSubKeys:LPDWORD;lpcbMaxSubKeyLen:LPDWORD; lpcbMaxClassLen:LPDWORD; lpcValues:LPDWORD; lpcbMaxValueNameLen:LPDWORD;
- lpcbMaxValueLen:LPDWORD;lpcbSecurityDescriptor:LPDWORD; lpftLastWriteTime:PFILETIME):LONG;
- function RegOpenKeyExA(hKey:HKEY; lpSubKey:LPCSTR; ulOptions:DWORD; samDesired:REGSAM; var hkResult: HKEY):LONG;
- function RegSetValueExA(hKey:HKEY; lpValueName:LPCSTR; Reserved:DWORD; dwType:DWORD; lpData:pointer;cbData:DWORD):LONG;
- {$endif read_interface}
- {$ifdef read_implementation}
- function LoadLibraryA(lpLibFileName:LPCSTR):HINST;
- var ws: PWideChar;
- begin
- ws:=PCharToPWideChar(lpLibFileName);
- Result:=Windows.LoadLibrary(ws);
- FreeMem(ws);
- end;
- function RegCreateKeyExA(hKey:HKEY; lpSubKey:LPCSTR; Reserved:DWORD; lpClass:LPSTR; dwOptions:DWORD;samDesired:REGSAM; lpSecurityAttributes:LPSECURITY_ATTRIBUTES; var hkResult: HKEY; lpdwDisposition:LPDWORD):LONG;
- var lpwsSubKey,
- lpwsClass: PWideChar;
- begin
- lpwsSubKey:=PCharToPWideChar(lpSubKey);
- lpwsClass:=PCharToPWideChar(lpClass);
- Result:=RegCreateKeyExW(hKey,lpwsSubKey,Reserved,lpwsClass,dwOptions,samDesired,lpSecurityAttributes, hkResult,lpdwDisposition);
- FreeMem(lpwsClass); FreeMem(lpwsSubKey);
- end;
- function RegDeleteKeyA(hKey:HKEY; lpSubKey:LPCSTR):LONG;
- var lpwsSubKey: PWideChar;
- begin
- lpwsSubKey:=PCharToPWideChar(lpSubKey);
- Result:=RegDeleteKeyW(hKey,lpwsSubKey);
- FreeMem(lpwsSubKey);
- end;
- function RegDeleteValueA(hKey:HKEY; lpValueName:LPCSTR):LONG;
- var lpwsValueName: PWideChar;
- begin
- lpwsValueName:=PCharToPWideChar(lpValueName);
- Result:=RegDeleteValueW(hKey,lpwsValueName);
- FreeMem(lpwsValueName);
- end;
- function RegEnumKeyExA(hKey:HKEY; dwIndex:DWORD; lpName:LPSTR; var cbName:DWORD; lpReserved:LPDWORD;lpClass:LPSTR; lpcbClass:LPDWORD; lpftLastWriteTime:PFILETIME):LONG;
- var
- ClassBuf, NameBuf: array[0..255] of WideChar;
- csz, nsz: DWORD;
- begin
- csz:=SizeOf(ClassBuf) div SizeOf(WideChar);
- nsz:=SizeOf(NameBuf) div SizeOf(WideChar);
- Result:=RegEnumKeyExW(hKey, dwIndex, NameBuf, nsz, lpReserved, ClassBuf, @csz, lpftLastWriteTime);
- if cbName > nsz then
- WideToAnsiBuf(NameBuf, nsz, lpName, cbName);
- cbName:=nsz;
- if (Result = 0) and (lpcbClass <> nil) then begin
- if (lpClass <> nil) and (lpcbClass^ > csz) then
- WideToAnsiBuf(ClassBuf, csz, lpClass, lpcbClass^);
- lpcbClass^:=csz;
- end;
- end;
- function RegEnumValueA(hKey:HKEY; dwIndex:DWORD; lpValueName:LPSTR; var cbValueName: DWORD; lpReserved:LPDWORD;lpType:LPDWORD; lpData:pointer; lpcbData:LPDWORD):LONG;
- var
- t, sz, nsz: DWORD;
- DataBuf: pointer;
- NameBuf: array[0..255] of WideChar;
- begin
- if lpcbData <> nil then
- sz:=lpcbData^
- else
- sz:=0;
- if lpData <> nil then begin
- sz:=sz*2;
- GetMem(DataBuf, sz);
- end
- else
- DataBuf:=nil;
- nsz:=SizeOf(NameBuf) div SizeOf(WideChar);
- Result:=RegEnumValueW(hKey, dwIndex, NameBuf, @nsz, lpReserved, @t, DataBuf, @sz);
- if cbValueName > nsz then
- WideToAnsiBuf(NameBuf, nsz, lpValueName, cbValueName);
- cbValueName:=nsz;
- if Result = 0 then begin
- if lpType <> nil then
- lpType^:=t;
- if lpcbData <> nil then begin
- if (lpData <> nil) and (t in [REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ]) then
- sz:=WideCharToMultiByte(CP_ACP, 0, DataBuf, sz div SizeOf(WideChar), lpData, lpcbData^, nil, nil)
- else begin
- if sz > lpcbData^ then
- Result:=ERROR_MORE_DATA
- else
- if lpData <> nil then
- Move(DataBuf^, lpData^, sz);
- end;
- lpcbData^:=sz;
- end;
- end;
- if DataBuf <> nil then
- FreeMem(DataBuf);
- end;
- function RegQueryValueExA(hKey:HKEY; lpValueName:LPCSTR; lpReserved:LPDWORD; lpType:LPDWORD; lpData:pointer;lpcbData:LPDWORD):LONG;
- var
- lpwsValueName: PWideChar;
- t, sz: DWORD;
- DataBuf: pointer;
- begin
- if lpcbData <> nil then
- sz:=lpcbData^
- else
- sz:=0;
- if lpData <> nil then begin
- sz:=sz*2;
- GetMem(DataBuf, sz);
- end
- else
- DataBuf:=nil;
- lpwsValueName:=PCharToPWideChar(lpValueName);
- Result:=RegQueryValueExW(hKey, lpwsValueName, lpReserved, @t, DataBuf, @sz);
- FreeMem(lpwsValueName);
- if Result = 0 then begin
- if lpType <> nil then
- lpType^:=t;
- if lpcbData <> nil then begin
- if t in [REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ] then begin
- sz:=sz div SizeOf(WideChar);
- if lpData <> nil then
- sz:=WideCharToMultiByte(CP_ACP, 0, DataBuf, sz, lpData, lpcbData^, nil, nil);
- end
- else begin
- if sz > lpcbData^ then
- Result:=ERROR_MORE_DATA
- else
- if lpData <> nil then
- Move(DataBuf^, lpData^, sz);
- end;
- lpcbData^:=sz;
- end;
- end;
- if DataBuf <> nil then
- FreeMem(DataBuf);
- end;
- function RegQueryInfoKeyA(hKey:HKEY; lpClass:LPSTR; lpcbClass:LPDWORD; lpReserved:LPDWORD; lpcSubKeys:LPDWORD;lpcbMaxSubKeyLen:LPDWORD; lpcbMaxClassLen:LPDWORD; lpcValues:LPDWORD; lpcbMaxValueNameLen:LPDWORD;
- lpcbMaxValueLen:LPDWORD;lpcbSecurityDescriptor:LPDWORD; lpftLastWriteTime:PFILETIME):LONG;
- var
- ClassBuf: array[0..255] of WideChar;
- csz: DWORD;
- begin
- csz:=SizeOf(ClassBuf) div SizeOf(WideChar);
- Result:=RegQueryInfoKeyW(hKey, ClassBuf, @csz, lpReserved, lpcSubKeys , lpcbMaxSubKeyLen, lpcbMaxClassLen,
- lpcValues, lpcbMaxValueNameLen, lpcbMaxValueLen, lpcbSecurityDescriptor, lpftLastWriteTime);
- if (Result = 0) and (lpcbClass <> nil) then begin
- if (lpClass <> nil) and (lpcbClass^ > csz) then
- WideToAnsiBuf(ClassBuf, csz, lpClass, lpcbClass^);
- lpcbClass^:=csz;
- end;
- end;
- function RegOpenKeyExA(hKey:HKEY; lpSubKey:LPCSTR; ulOptions:DWORD; samDesired:REGSAM; var hkResult: HKEY):LONG;
- var lpwsSubKey: PWideChar;
- begin
- lpwsSubKey:=PCharToPWideChar(lpSubKey);
- Result:=RegOpenKeyExW(hKey, lpwsSubKey, ulOptions, samDesired, hkResult);
- FreeMem(lpwsSubKey);
- end;
- function RegSetValueExA(hKey:HKEY; lpValueName:LPCSTR; Reserved:DWORD; dwType:DWORD; lpData:pointer;cbData:DWORD):LONG;
- var
- lpwsValueName, ws: PWideChar;
- DataBuf: pointer;
- sz: DWORD;
- begin
- lpwsValueName:=PCharToPWideChar(lpValueName);
- if dwType in [REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ] then begin
- if (cbData > 0) and (PChar(lpData)[cbData - 1] = #0) then
- Dec(cbData);
- ws:=PCharToPWideChar(lpData, cbData, @sz);
- cbData:=sz*SizeOf(WideChar);
- DataBuf:=ws;
- end
- else begin
- DataBuf:=lpData;
- ws:=nil;
- end;
- Result:=RegSetValueExW(hKey, lpwsValueName, Reserved, dwType, DataBuf, cbData);
- FreeMem(lpwsValueName);
- if ws <> nil then
- FreeMem(ws);
- end;
- {$endif read_implementation}
|