2
This file is part of the Free Pascal run time library.
3
Copyright (c) 2006 by the Free Pascal development team.
5
Contains missing wince functions present in win32 api
7
See the file COPYING.FPC, included in this distribution,
8
for details about the copyright.
10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
**********************************************************************}
16
*What should contain this file*
18
functions missing on wince api
22
{$ifdef read_interface}
24
function LoadLibraryA(lpLibFileName:LPCSTR):HINST;
25
function RegCreateKeyExA(hKey:HKEY; lpSubKey:LPCSTR; Reserved:DWORD; lpClass:LPSTR; dwOptions:DWORD;samDesired:REGSAM; lpSecurityAttributes:LPSECURITY_ATTRIBUTES; var hkResult: HKEY; lpdwDisposition:LPDWORD):LONG;
26
function RegDeleteKeyA(hKey:HKEY; lpSubKey:LPCSTR):LONG;
27
function RegDeleteValueA(hKey:HKEY; lpValueName:LPCSTR):LONG;
28
function RegEnumKeyExA(hKey:HKEY; dwIndex:DWORD; lpName:LPSTR; var cbName:DWORD; lpReserved:LPDWORD;lpClass:LPSTR; lpcbClass:LPDWORD; lpftLastWriteTime:PFILETIME):LONG;
29
function RegEnumValueA(hKey:HKEY; dwIndex:DWORD; lpValueName:LPSTR; var cbValueName: DWORD; lpReserved:LPDWORD;lpType:LPDWORD; lpData:pointer; lpcbData:LPDWORD):LONG;
30
function RegQueryValueExA(hKey:HKEY; lpValueName:LPCSTR; lpReserved:LPDWORD; lpType:LPDWORD; lpData:pointer;lpcbData:LPDWORD):LONG;
31
function RegQueryInfoKeyA(hKey:HKEY; lpClass:LPSTR; lpcbClass:LPDWORD; lpReserved:LPDWORD; lpcSubKeys:LPDWORD;lpcbMaxSubKeyLen:LPDWORD; lpcbMaxClassLen:LPDWORD; lpcValues:LPDWORD; lpcbMaxValueNameLen:LPDWORD;
32
lpcbMaxValueLen:LPDWORD;lpcbSecurityDescriptor:LPDWORD; lpftLastWriteTime:PFILETIME):LONG;
33
function RegOpenKeyExA(hKey:HKEY; lpSubKey:LPCSTR; ulOptions:DWORD; samDesired:REGSAM; var hkResult: HKEY):LONG;
34
function RegSetValueExA(hKey:HKEY; lpValueName:LPCSTR; Reserved:DWORD; dwType:DWORD; lpData:pointer;cbData:DWORD):LONG;
36
{$endif read_interface}
39
{$ifdef read_implementation}
41
function LoadLibraryA(lpLibFileName:LPCSTR):HINST;
44
ws:=PCharToPWideChar(lpLibFileName);
45
Result:=Windows.LoadLibrary(ws);
49
function RegCreateKeyExA(hKey:HKEY; lpSubKey:LPCSTR; Reserved:DWORD; lpClass:LPSTR; dwOptions:DWORD;samDesired:REGSAM; lpSecurityAttributes:LPSECURITY_ATTRIBUTES; var hkResult: HKEY; lpdwDisposition:LPDWORD):LONG;
53
lpwsSubKey:=PCharToPWideChar(lpSubKey);
54
lpwsClass:=PCharToPWideChar(lpClass);
55
Result:=RegCreateKeyExW(hKey,lpwsSubKey,Reserved,lpwsClass,dwOptions,samDesired,lpSecurityAttributes, hkResult,lpdwDisposition);
56
FreeMem(lpwsClass); FreeMem(lpwsSubKey);
59
function RegDeleteKeyA(hKey:HKEY; lpSubKey:LPCSTR):LONG;
60
var lpwsSubKey: PWideChar;
62
lpwsSubKey:=PCharToPWideChar(lpSubKey);
63
Result:=RegDeleteKeyW(hKey,lpwsSubKey);
67
function RegDeleteValueA(hKey:HKEY; lpValueName:LPCSTR):LONG;
68
var lpwsValueName: PWideChar;
70
lpwsValueName:=PCharToPWideChar(lpValueName);
71
Result:=RegDeleteValueW(hKey,lpwsValueName);
72
FreeMem(lpwsValueName);
75
function RegEnumKeyExA(hKey:HKEY; dwIndex:DWORD; lpName:LPSTR; var cbName:DWORD; lpReserved:LPDWORD;lpClass:LPSTR; lpcbClass:LPDWORD; lpftLastWriteTime:PFILETIME):LONG;
77
ClassBuf, NameBuf: array[0..255] of WideChar;
80
csz:=SizeOf(ClassBuf) div SizeOf(WideChar);
81
nsz:=SizeOf(NameBuf) div SizeOf(WideChar);
82
Result:=RegEnumKeyExW(hKey, dwIndex, NameBuf, nsz, lpReserved, ClassBuf, @csz, lpftLastWriteTime);
84
WideToAnsiBuf(NameBuf, nsz, lpName, cbName);
86
if (Result = 0) and (lpcbClass <> nil) then begin
87
if (lpClass <> nil) and (lpcbClass^ > csz) then
88
WideToAnsiBuf(ClassBuf, csz, lpClass, lpcbClass^);
93
function RegEnumValueA(hKey:HKEY; dwIndex:DWORD; lpValueName:LPSTR; var cbValueName: DWORD; lpReserved:LPDWORD;lpType:LPDWORD; lpData:pointer; lpcbData:LPDWORD):LONG;
97
NameBuf: array[0..255] of WideChar;
99
if lpcbData <> nil then
103
if lpData <> nil then begin
109
nsz:=SizeOf(NameBuf) div SizeOf(WideChar);
110
Result:=RegEnumValueW(hKey, dwIndex, NameBuf, @nsz, lpReserved, @t, DataBuf, @sz);
111
if cbValueName > nsz then
112
WideToAnsiBuf(NameBuf, nsz, lpValueName, cbValueName);
114
if Result = 0 then begin
115
if lpType <> nil then
117
if lpcbData <> nil then begin
118
if (lpData <> nil) and (t in [REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ]) then
119
sz:=WideCharToMultiByte(CP_ACP, 0, DataBuf, sz div SizeOf(WideChar), lpData, lpcbData^, nil, nil)
121
if sz > lpcbData^ then
122
Result:=ERROR_MORE_DATA
124
if lpData <> nil then
125
Move(DataBuf^, lpData^, sz);
130
if DataBuf <> nil then
134
function RegQueryValueExA(hKey:HKEY; lpValueName:LPCSTR; lpReserved:LPDWORD; lpType:LPDWORD; lpData:pointer;lpcbData:LPDWORD):LONG;
136
lpwsValueName: PWideChar;
140
if lpcbData <> nil then
144
if lpData <> nil then begin
150
lpwsValueName:=PCharToPWideChar(lpValueName);
151
Result:=RegQueryValueExW(hKey, lpwsValueName, lpReserved, @t, DataBuf, @sz);
152
FreeMem(lpwsValueName);
153
if Result = 0 then begin
154
if lpType <> nil then
156
if lpcbData <> nil then begin
157
if t in [REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ] then begin
158
sz:=sz div SizeOf(WideChar);
159
if lpData <> nil then
160
sz:=WideCharToMultiByte(CP_ACP, 0, DataBuf, sz, lpData, lpcbData^, nil, nil);
163
if sz > lpcbData^ then
164
Result:=ERROR_MORE_DATA
166
if lpData <> nil then
167
Move(DataBuf^, lpData^, sz);
172
if DataBuf <> nil then
176
function RegQueryInfoKeyA(hKey:HKEY; lpClass:LPSTR; lpcbClass:LPDWORD; lpReserved:LPDWORD; lpcSubKeys:LPDWORD;lpcbMaxSubKeyLen:LPDWORD; lpcbMaxClassLen:LPDWORD; lpcValues:LPDWORD; lpcbMaxValueNameLen:LPDWORD;
177
lpcbMaxValueLen:LPDWORD;lpcbSecurityDescriptor:LPDWORD; lpftLastWriteTime:PFILETIME):LONG;
179
ClassBuf: array[0..255] of WideChar;
182
csz:=SizeOf(ClassBuf) div SizeOf(WideChar);
183
Result:=RegQueryInfoKeyW(hKey, ClassBuf, @csz, lpReserved, lpcSubKeys , lpcbMaxSubKeyLen, lpcbMaxClassLen,
184
lpcValues, lpcbMaxValueNameLen, lpcbMaxValueLen, lpcbSecurityDescriptor, lpftLastWriteTime);
185
if (Result = 0) and (lpcbClass <> nil) then begin
186
if (lpClass <> nil) and (lpcbClass^ > csz) then
187
WideToAnsiBuf(ClassBuf, csz, lpClass, lpcbClass^);
192
function RegOpenKeyExA(hKey:HKEY; lpSubKey:LPCSTR; ulOptions:DWORD; samDesired:REGSAM; var hkResult: HKEY):LONG;
193
var lpwsSubKey: PWideChar;
195
lpwsSubKey:=PCharToPWideChar(lpSubKey);
196
Result:=RegOpenKeyExW(hKey, lpwsSubKey, ulOptions, samDesired, hkResult);
200
function RegSetValueExA(hKey:HKEY; lpValueName:LPCSTR; Reserved:DWORD; dwType:DWORD; lpData:pointer;cbData:DWORD):LONG;
202
lpwsValueName: PWideChar;
206
lpwsValueName:=PCharToPWideChar(lpValueName);
207
if dwType in [REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ] then begin
208
DataBuf:=PCharToPWideChar(lpData, cbData, @sz);
209
if (cbData > 0) and (PChar(lpData)[cbData - 1] <> #0) then
210
Inc(sz, SizeOf(WideChar));
215
Result:=RegSetValueExW(hKey, lpwsValueName, Reserved, dwType, DataBuf, cbData);
216
FreeMem(lpwsValueName);
217
if DataBuf <> nil then
221
{$endif read_implementation}