windbase.pp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 2008 Free Pascal development team.
  4. See the file COPYING.FPC, included in this distribution,
  5. for details about the copyright.
  6. This program is distributed in the hope that it will be useful,
  7. but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  9. conversion of windbase.h by Carolos Foscolos
  10. **********************************************************************
  11. Module: windbase.pp
  12. Purpose: Master include file for WINCE Database APIs.
  13. Changes: 2008/08/20 - Carolos: * Fixed PCEOID, CREATE_INVALIDGUID and cleaned up file.
  14. * Included windbase_edb.inc.
  15. }
  16. {$mode objfpc}
  17. {$IFNDEF FPC_DOTTEDUNITS}
  18. unit windbase;
  19. {$ENDIF FPC_DOTTEDUNITS}
  20. interface
  21. {$IFDEF FPC_DOTTEDUNITS}
  22. uses WinApi.Windows;
  23. {$ELSE FPC_DOTTEDUNITS}
  24. uses windows;
  25. {$ENDIF FPC_DOTTEDUNITS}
  26. //{$DEFINE EDB}
  27. {$ifndef EDB}
  28. {$WARNING If target platform is Windows Mobile 5.0 or greater, Please use the -dEDB compiler option to use EDB instead of CEDB.}
  29. // CEDB is deprecated and will no longer work in future versions of Windows Mobile.
  30. // It is strongly recommended that you #define EDB which will enable you to use EDB instead of CEDB.
  31. {$endif}
  32. {$IFDEF FPC}
  33. {$PACKRECORDS C}
  34. {$ENDIF}
  35. {$calling cdecl} //convention is cdecl for WinCE API
  36. type
  37. //CEOID: Unique identifier for all WINCE objects.
  38. //Comment: Every WINCE object can be efficiently referred to by its OID.
  39. // OID's are unique in the system and are not reused.
  40. CEOID = DWORD;
  41. TCEOID = DWORD;
  42. PCEOID = ^CEOID;
  43. CEGUID = record
  44. Data1 : DWORD;
  45. Data2 : DWORD;
  46. Data3 : DWORD;
  47. Data4 : DWORD;
  48. end;
  49. _CEGUID = CEGUID;
  50. PCEGUID = ^CEGUID;
  51. TCEGUID = CEGUID;
  52. const
  53. WM_DBNOTIFICATION = $03FD;
  54. CEDB_EXNOTIFICATION = $00000001;
  55. type
  56. CENOTIFYREQUEST = record
  57. dwSize : DWORD; //Must be set to the structure size
  58. hwnd : HWND; //Window handle for notifications to be posted
  59. dwFlags : DWORD;
  60. hHeap : HANDLE; // heap from which to allocate EX-NOTIFICATIONS
  61. dwParam : DWORD;
  62. end;
  63. _CENOTIFYREQUEST = CENOTIFYREQUEST;
  64. PCENOTIFYREQUEST = ^CENOTIFYREQUEST;
  65. TCENOTIFYREQUEST = CENOTIFYREQUEST;
  66. CENOTIFICATION = record
  67. dwSize : DWORD;
  68. dwParam : DWORD;
  69. uType : UINT;
  70. guid : CEGUID;
  71. oid : CEOID;
  72. oidParent : CEOID;
  73. end;
  74. _CENOTIFICATION = CENOTIFICATION;
  75. PCENOTIFICATION = ^CENOTIFICATION;
  76. TCENOTIFICATION = CENOTIFICATION;
  77. //CEFILEINFO: Contains information about a file object.
  78. CEFILEINFO = record
  79. dwAttributes : DWORD; //File attributes
  80. oidParent : CEOID; //CEOID of parent directory
  81. szFileName : array[0..(MAX_PATH)-1] of WCHAR; //Full path name of the file
  82. ftLastChanged : FILETIME; //Time stamp of last change
  83. dwLength : DWORD; //Length of file
  84. end;
  85. _CEFILEINFO = CEFILEINFO;
  86. PCEFILEINFO = ^CEFILEINFO;
  87. TCEFILEINFO = CEFILEINFO;
  88. //CEDIRINFO: Contains information about a directory object.
  89. CEDIRINFO = record
  90. dwAttributes : DWORD; //Directory attributes
  91. oidParent : CEOID; //CEOID of parent directory
  92. szDirName : array[0..(MAX_PATH)-1] of WCHAR; //Full path name of the directory
  93. end;
  94. _CEDIRINFO = CEDIRINFO;
  95. PCEDIRINFO = ^CEDIRINFO;
  96. TCEDIRINFO = CEDIRINFO;
  97. const
  98. DB_CEOID_CREATED = WM_USER+$1; //DB_CEOID_CREATED: Msg sent on creation of new oid.
  99. //WParam = CEOID modified, LParam = CEOID's parent CEOID
  100. DB_CEOID_DATABASE_DELETED = WM_USER+$2; //DB_CEOID_DATABASE_DELETED: Msg sent on deletion of database.
  101. //WParam = CEOID modified, LParam = CEOID's parent CEOID
  102. DB_CEOID_RECORD_DELETED = WM_USER+$3; //DB_CEOID_RECORD_DELETED: Msg sent on deletion of record.
  103. //WParam = CEOID modified, LParam = CEOID's parent CEOID
  104. DB_CEOID_FILE_DELETED = WM_USER+$4; //DB_CEOID_FILE_DELETED: Msg sent on deletion of file.
  105. //WParam = CEOID modified, LParam = CEOID's parent CEOID
  106. DB_CEOID_DIRECTORY_DELETED = WM_USER+$5; //DB_CEOID_DIRECTORY_DELETED: Msg sent on deletion of directory.
  107. //WParam = CEOID modified, LParam = CEOID's parent CEOID
  108. DB_CEOID_CHANGED = WM_USER+$6; //DB_CEOID_CHANGED: Msg sent on item modification.
  109. //WParam = CEOID modified, LParam = CEOID's parent CEOID
  110. REPL_CHANGE_WILLCLEAR = $00000001; //Flags for CeGetReplChangeMask.
  111. type
  112. STORE_INFORMATION = record
  113. dwStoreSize : DWORD;
  114. dwFreeSize : DWORD;
  115. end;
  116. LPSTORE_INFORMATION = ^STORE_INFORMATION;
  117. PSTORE_INFORMATION = ^STORE_INFORMATION;
  118. TSTORE_INFORMATION = STORE_INFORMATION;
  119. function GetStoreInformation(lpsi:LPSTORE_INFORMATION):BOOL;cdecl;external KernelDLL name 'GetStoreInformation';
  120. type
  121. //CEPROPID: PropID's for WINCE properties.
  122. //Comment: PropID's on the WINCE match PropID's used by Mapi1. The top 2 bytes are an ID
  123. // and the low 2 bytes are the type. For a list of supported types look at the tags
  124. // supported in <t CEVALUNION>. We reserve one bit (0x4000) in the type as the
  125. // flag <b CEPROPVAL_NULL> as a special flag. It denotes that a property was not
  126. // found in a Read call, or that the property should be deleted in a write call.
  127. CEPROPID = DWORD;
  128. PCEPROPID = ^CEPROPID;
  129. TCEPROPID = CEPROPID;
  130. function TypeFromPropID(propid : longint) : WORD;
  131. type
  132. //CERECORDINFO: Contains information about a record object.
  133. CERECORDINFO = record
  134. oidParent : CEOID; //CEOID of parent database
  135. end;
  136. _CERECORDINFO = CERECORDINFO;
  137. PCERECORDINFO = ^CERECORDINFO;
  138. TCERECORDINFO = CERECORDINFO;
  139. const
  140. CEDB_SORT_DESCENDING = $00000001;
  141. CEDB_SORT_CASEINSENSITIVE = $00000002;
  142. CEDB_SORT_UNKNOWNFIRST = $00000004;
  143. CEDB_SORT_GENERICORDER = $00000008; //Internally used for generic ordering.
  144. CEDB_SORT_IGNORENONSPACE = $00000010;
  145. CEDB_SORT_IGNORESYMBOLS = $00000020;
  146. CEDB_SORT_IGNOREKANATYPE = $00000040;
  147. CEDB_SORT_IGNOREWIDTH = $00000080;
  148. CEDB_SORT_STRINGSORT = $00000100;
  149. CEDB_SORT_UNIQUE = $00000200;
  150. CEDB_SORT_NONNULL = $00000400;
  151. // High nibble of flags reserved
  152. type
  153. SORTORDERSPEC = record //SORTORDERSPEC: Specifies details about a sort order in a database.
  154. //Comment: Note that we only support simple sorts on a primary key.
  155. // Records with the same key value will be sorted in arbitrary order.
  156. propid : CEPROPID; //PropID to be sorted on.
  157. dwFlags : DWORD; //Any combination of the following
  158. //dwFlags:
  159. //CEDB_SORT_DESCENDING: Sort in descending order. Default is ascending.
  160. //CEDB_SORT_CASEINSENSITIVE: Only valid for strings.
  161. //CEDB_SORT_UNKNOWNFIRST: Puts records which do not contain this property
  162. // before all the other records.
  163. // Default is to put them last.
  164. //CEDB_SORT_IGNORENONSPACE: Only valid for strings.
  165. // This flag only has an effect for the locales in
  166. // which accented characters are sorted in a second
  167. // pass from main characters.
  168. //CEDB_SORT_IGNORESYMBOLS: Only valid for strings.
  169. //CEDB_SORT_IGNOREKANATYPE: Only valid for strings.
  170. // Do not differentiate between Hiragana and
  171. // Katakana characters.
  172. //CEDB_SORT_IGNOREWIDTH: Only valid for strings.
  173. // Do not differentiate between a single-byte
  174. // character and the same character as a
  175. // double-byte character.
  176. //CEDB_SORT_UNIQUE: Require the property to be unique across all records
  177. // in the database.
  178. //CEDB_SORT_NONNULL: Require the property to be present in all records.
  179. end;
  180. _SORTORDERSPEC = SORTORDERSPEC;
  181. PSORTORDERSPEC = ^SORTORDERSPEC;
  182. TSORTORDERSPEC = SORTORDERSPEC;
  183. const
  184. CEDB_MAXSORTPROP = 3;
  185. SORTORDERSPECEX_VERSION = 1;
  186. type
  187. //SORTORDERSPECEX: Specifies details about a sort order in a database.
  188. //comment: Supports a hierarchy of sorts.
  189. SORTORDERSPECEX = record
  190. wVersion : WORD; //Version of this structure.
  191. wNumProps : WORD; //Number of properties in this sort order.
  192. //Must not be more than CEDB_MAXSORTPROP.
  193. wKeyFlags : WORD; //Flags that correspond to the sort key.
  194. //Any combination of the following:
  195. // CEDB_SORT_UNIQUE: Require the key to be
  196. // unique across all records in the database.
  197. wReserved : WORD; //Padding for DWORD alignment
  198. rgPropID : array[0..(CEDB_MAXSORTPROP)-1] of CEPROPID; //Array of PropIDs to be sorted
  199. // on, in order of importance.
  200. rgdwFlags : array[0..(CEDB_MAXSORTPROP)-1] of DWORD; //Flags that correspond to the sort PropIDs
  201. //Any combination of the following:
  202. //CEDB_SORT_DESCENDING: Sort in descending order. Default is ascending
  203. //CEDB_SORT_CASEINSENSITIVE: Only valid for strings.
  204. //CEDB_SORT_UNKNOWNFIRST: Puts records which do
  205. // not contain this property before all the other records.
  206. // Default is to put them last.
  207. //CEDB_SORT_IGNORENONSPACE: Only valid for strings.
  208. // This flag only has an effect for the locales in which
  209. // accented characters are sorted in a second pass from
  210. // main characters.
  211. //CEDB_SORT_IGNORESYMBOLS: Only valid for strings.
  212. //CEDB_SORT_IGNOREKANATYPE: Only valid for strings.
  213. // Do not differentiate between Hiragana and Katakana characters.
  214. //CEDB_SORT_IGNOREWIDTH: Only valid for strings.
  215. // Do not differentiate between a single-byte character
  216. // and the same character as a double-byte character.
  217. //CEDB_SORT_NONNULL: Require the property to be
  218. // present in all records.
  219. end;
  220. _SORTORDERSPECEX = SORTORDERSPECEX;
  221. PSORTORDERSPECEX = ^_SORTORDERSPECEX;
  222. TSORTORDERSPECEX = SORTORDERSPECEX;
  223. const
  224. ERROR_DBPROP_NOT_FOUND = ERROR_ACCESS_DENIED;
  225. ERROR_REPEATED_KEY = ERROR_ALREADY_EXISTS;
  226. CEDB_MAXDBASENAMELEN = 32;
  227. CEDB_MAXSORTORDER = 4;
  228. // Values for validity mask flags
  229. CEDB_VALIDNAME = $0001;
  230. CEDB_VALIDTYPE = $0002;
  231. CEDB_VALIDSORTSPEC = $0004;
  232. CEDB_VALIDMODTIME = $0008;
  233. CEDB_VALIDDBFLAGS = $0010;
  234. CEDB_VALIDCREATE = ( (CEDB_VALIDNAME or CEDB_VALIDTYPE)
  235. or CEDB_VALIDSORTSPEC )
  236. or CEDB_VALIDDBFLAGS;
  237. // Values for dbflags
  238. CEDB_NOCOMPRESS = $00010000;
  239. CEDB_SYSTEMDB = $00020000;
  240. type
  241. // CEDBASEINFO: Contains information about a database object
  242. CEDBASEINFO = record
  243. dwFlags : DWORD; //Indicates which fields are valid. Possible values are:
  244. //CEDB_VALIDNAME: The name field is valid and should be used.
  245. //CEDB_VALIDTYPE: The type field is valid and should be used.
  246. //CEDB_VALIDSORTSPEC: The sortspecs are valid and should be used.
  247. szDbaseName : array[0..(CEDB_MAXDBASENAMELEN)-1] of WCHAR; //Name of Database. Max CEDB_MAXDBASENAMELEN characters.
  248. dwDbaseType : DWORD; //A type ID for this database.
  249. wNumRecords : WORD; //Number of records in the database
  250. wNumSortOrder : WORD; //Number of sort orders active in the database.
  251. //Maximum is CEDB_MAXSORTORDER.
  252. dwSize : DWORD; //Size in bytes that this database is using
  253. ftLastModified : FILETIME; //Last time this database was modified
  254. rgSortSpecs : array[0..(CEDB_MAXSORTORDER)-1] of SORTORDERSPEC; //Actual sort order descriptions.
  255. //Only first wNumSortOrder of this array are valid.
  256. end;
  257. _CEDBASEINFO = CEDBASEINFO;
  258. PCEDBASEINFO = ^CEDBASEINFO;
  259. TCEDBASEINFO = CEDBASEINFO;
  260. const
  261. CEDBASEINFOEX_VERSION = 1;
  262. type
  263. //CEDBASEINFOEX: Contains extended information about a database object.
  264. CEDBASEINFOEX = record
  265. wVersion : WORD; //Version of this structure.
  266. wNumSortOrder : WORD; //Number of sort orders active in the database
  267. //Maximum is CEDB_MAXSORTORDER.
  268. dwFlags : DWORD; //Indicates which fields are valid. Possible values are:
  269. // CEDB_VALIDNAME: The name field is valid and should be used.
  270. // CEDB_VALIDTYPE: The type field is valid and should be used.
  271. // CEDB_VALIDSORTSPEC: The sortspecs are valid and should be used.
  272. szDbaseName : array[0..(CEDB_MAXDBASENAMELEN)-1] of WCHAR;//Name of Database. Max CEDB_MAXDBASENAMELEN characters.
  273. dwDbaseType : DWORD; //A type ID for this database
  274. dwNumRecords : DWORD; //Number of records in the database
  275. dwSize : DWORD; //Size in bytes that this database is using
  276. ftLastModified : FILETIME; //Last time this database was modified
  277. rgSortSpecs : array[0..(CEDB_MAXSORTORDER)-1] of SORTORDERSPECEX; //Actual sort order descriptions.
  278. //Only first wNumSortOrder of this array are valid.
  279. end;
  280. LPCEDBASEINFOEX = ^CEDBASEINFOEX;
  281. _CEDBASEINFOEX = CEDBASEINFOEX;
  282. TCEDBASEINFOEX = CEDBASEINFOEX;
  283. PCEDBASEINFOEX = ^CEDBASEINFOEX;
  284. const
  285. BY_HANDLE_DB_INFORMATION_VERSION = 1;
  286. type
  287. //BY_HANDLE_DB_INFORMATION: Contains extended information about an open database
  288. BY_HANDLE_DB_INFORMATION = record
  289. wVersion : WORD; //Version of this structure.
  290. wReserved : WORD; //Padding for DWORD alignment.
  291. guidVol : CEGUID; //GUID of parent volume.
  292. oidDbase : CEOID; //OID of database.
  293. infDatabase : CEDBASEINFOEX; //Extended database information.
  294. end;
  295. _BY_HANDLE_DB_INFORMATION = BY_HANDLE_DB_INFORMATION;
  296. LPBY_HANDLE_DB_INFORMATION = ^BY_HANDLE_DB_INFORMATION;
  297. TBY_HANDLE_DB_INFORMATION = BY_HANDLE_DB_INFORMATION;
  298. PBY_HANDLE_DB_INFORMATION = ^BY_HANDLE_DB_INFORMATION;
  299. { flags for open database - use low word }
  300. const
  301. CEDB_AUTOINCREMENT = $00000001;
  302. CEDB_SEEK_CEOID = $00000001;
  303. CEDB_SEEK_BEGINNING = $00000002;
  304. CEDB_SEEK_END = $00000004;
  305. CEDB_SEEK_CURRENT = $00000008;
  306. CEDB_SEEK_VALUESMALLER = $00000010;
  307. CEDB_SEEK_VALUEFIRSTEQUAL = $00000020;
  308. CEDB_SEEK_VALUEGREATER = $00000040;
  309. CEDB_SEEK_VALUENEXTEQUAL = $00000080;
  310. type
  311. CEBLOB = record
  312. dwCount : DWORD;
  313. lpb : LPBYTE;
  314. end;
  315. _CEBLOB = CEBLOB;
  316. PCEBLOB = ^CEBLOB;
  317. TCEBLOB = CEBLOB;
  318. const
  319. CEVT_I2 = 2;
  320. CEVT_UI2 = 18;
  321. CEVT_I4 = 3;
  322. CEVT_UI4 = 19;
  323. CEVT_FILETIME = 64;
  324. CEVT_LPWSTR = 31;
  325. CEVT_BLOB = 65;
  326. CEVT_BOOL = 11;
  327. CEVT_R8 = 5;
  328. type
  329. //CEVALUNION: value types for a property.
  330. CEVALUNION = record
  331. case longint of //UNION
  332. 0 : ( iVal : smallint ); //CEVT_I2
  333. 1 : ( uiVal : USHORT ); //CEVT_UI2
  334. 2 : ( lVal : longint ); //CEVT_I4
  335. 3 : ( ulVal : ULONG ); //CEVT_UI4
  336. 4 : ( filetime : TFILETIME ); //CEVT_FILETIME
  337. 5 : ( lpwstr : LPWSTR ); //CEVT_LPWSTR - Ptr to null terminated string
  338. 6 : ( blob : CEBLOB ); //CEVT_BLOB - DWORD count, and Ptr to bytes
  339. 7 : ( boolVal : BOOL ); //CEVT_BOOL
  340. 8 : ( dblVal : double ); //CEVT_R8
  341. end;
  342. _CEVALUNION = CEVALUNION;
  343. PCEVALUNION = ^CEVALUNION;
  344. TCEVALUNION = CEVALUNION;
  345. { @struct }
  346. { Don't define flags in low byte or high nibble }
  347. const
  348. CEDB_PROPNOTFOUND = $0100;
  349. CEDB_PROPDELETE = $0200;
  350. type
  351. //CEPROPVAL: Contains a property value
  352. CEPROPVAL = record
  353. propid : CEPROPID; //PropID of the value.
  354. wLenData : WORD; //Private field - can be garbage on entry
  355. wFlags : WORD; //Special flags for this property. Possible flags
  356. //CEDB_PROPNOTFOUND: Set by CeReadRecordProps field, if property not found.
  357. //CEDB_PROPDELETE: If passed to CeWriteRecordProps field, it causes
  358. // this property to be deleted.
  359. val : CEVALUNION; //Actual value for simple types, ptr for strings/blobs
  360. end;
  361. _CEPROPVAL = CEPROPVAL;
  362. PCEPROPVAL = ^CEPROPVAL;
  363. TCEPROPVAL = CEPROPVAL;
  364. const
  365. //Max record length defines
  366. CEDB_MAXDATABLOCKSIZE = 4092; //zero is a valid length so we cant have full 4196
  367. CEDB_MAXPROPDATASIZE = ( CEDB_MAXDATABLOCKSIZE * 16 ) - 1;
  368. // max record size is bound only by the max logging space we want to consume
  369. // this is not explicitly checked for - if you read too much data and cause the log
  370. // page to overflow the call will fail.
  371. CEDB_MAXRECORDSIZE = 128*1024;
  372. // Max number of records allowed in a single database.
  373. CEDB_MAXNUMRECORDS = $FFFF;
  374. // flags for ReadRecord
  375. CEDB_ALLOWREALLOC = $00000001;
  376. procedure CREATE_SYSTEMGUID (out pguid : CEGUID);
  377. procedure CREATE_INVALIDGUID (out pguid : CEGUID);
  378. function CHECK_SYSTEMGUID (pguid : PCEGUID) : longint;
  379. function CHECK_INVALIDGUID (pguid : PCEGUID) : longint;
  380. // Obsolete (CEDB) function versions for backward compatibility
  381. function CeFindFirstDatabase(dwClassID:DWORD):HANDLE; external KernelDLL name 'CeFindFirstDatabase';
  382. function CeFindNextDatabase(hEnum:HANDLE):CEOID; external KernelDLL name 'CeFindNextDatabase';
  383. function CeCreateDatabase(lpszname:LPWSTR; dwClassID:DWORD; wNumSortOrder:WORD; var rgSortSpecs:SORTORDERSPEC):CEOID; external KernelDLL name 'CeCreateDatabase';
  384. function CeCreateDatabaseEx(pguid:PCEGUID; var pInfo:CEDBASEINFO):CEOID; external KernelDLL name 'CeCreateDatabaseEx';
  385. function CeSetDatabaseInfo(oidDbase:CEOID; var pNewInfo:CEDBASEINFO):Boolean; external KernelDLL name 'CeSetDatabaseInfo';
  386. function CeSetDatabaseInfoEx(pguid:PCEGUID; oidDbase:CEOID; var pNewInfo:CEDBASEINFO):Boolean; external KernelDLL name 'CeSetDatabaseInfoEx';
  387. function CeOpenDatabase(poid:PCEOID; lpszName:LPWSTR; propid:CEPROPID; dwFlags:DWORD; hwndNotify:HWND):HANDLE; external KernelDLL name 'CeOpenDatabase';
  388. function CeOpenDatabaseEx(pguid:PCEGUID; poid:PCEOID; lpszName:LPWSTR; propid:CEPROPID; dwFlags:DWORD;
  389. var pReq:CENOTIFYREQUEST):HANDLE; external KernelDLL name 'CeOpenDatabaseEx';
  390. function CeDeleteDatabase(oid:CEOID):BOOL; external KernelDLL name 'CeDeleteDatabase';
  391. function CeReadRecordProps(hDbase:HANDLE; dwFlags:DWORD; lpcPropID:LPWORD; var rgPropID:CEPROPID; var lplpBuffer:LPBYTE;
  392. lpcbBuffer:LPDWORD):CEOID; external KernelDLL name 'CeReadRecordProps';
  393. function CeSeekDatabase(hDatabase:HANDLE; dwSeekType:DWORD; dwValue:DWORD; lpdwIndex:LPDWORD):CEOID; external KernelDLL name 'CeSeekDatabase';
  394. function CeGetDBInformationByHandle(hDbase:HANDLE; lpDBInfo:LPBY_HANDLE_DB_INFORMATION):Boolean; external KernelDLL name 'CeGetDBInformationByHandle';
  395. function CeFindFirstDatabaseEx(pguid:PCEGUID; dwClassID:DWORD):HANDLE; external KernelDLL name 'CeFindFirstDatabaseEx';
  396. function CeFindNextDatabaseEx(hEnum:HANDLE; pguid:PCEGUID):CEOID; external KernelDLL name 'CeFindNextDatabaseEx';
  397. function CeCreateDatabaseEx2(pguid:PCEGUID; pInfo:PCEDBASEINFOEX):CEOID; external KernelDLL name 'CeCreateDatabaseEx2';
  398. function CeSetDatabaseInfoEx2(pguid:PCEGUID; oidDbase:CEOID; var pNewInfo:CEDBASEINFOEX):Boolean; external KernelDLL name 'CeSetDatabaseInfoEx2';
  399. function CeOpenDatabaseEx2(pguid:PCEGUID; poid:PCEOID; lpszName:LPWSTR; var pSort:SORTORDERSPECEX; dwFlags:DWORD;
  400. var pReq:CENOTIFYREQUEST):HANDLE; external KernelDLL name 'CeOpenDatabaseEx2';
  401. function CeDeleteDatabaseEx(pguid:PCEGUID; oid:CEOID):Boolean; external KernelDLL name 'CeDeleteDatabaseEx';
  402. function CeSeekDatabaseEx(hDatabase:HANDLE; dwSeekType:DWORD; dwValue:DWORD; wNumVals:WORD; lpdwIndex:LPDWORD):CEOID; external KernelDLL name 'CeSeekDatabaseEx';
  403. function CeDeleteRecord(hDatabase:HANDLE; oidRecord:CEOID):Boolean; external KernelDLL name 'CeDeleteRecord';
  404. function CeReadRecordPropsEx(hDbase:HANDLE; dwFlags:DWORD; lpcPropID:LPWORD; rgPropID: PCEPROPID; lplpBuffer:LPBYTE;
  405. lpcbBuffer:LPDWORD; hHeap:HANDLE):CEOID; external KernelDLL name 'CeReadRecordPropsEx';
  406. function CeWriteRecordProps(hDbase:HANDLE; oidRecord:CEOID; cPropID:WORD; var rgPropVal:CEPROPVAL):CEOID; external KernelDLL name 'CeWriteRecordProps';
  407. function CeMountDBVol(pguid:PCEGUID; lpszVol:LPWSTR; dwFlags:DWORD):Boolean; external KernelDLL name 'CeMountDBVol';
  408. function CeUnmountDBVol(pguid:PCEGUID):Boolean; external KernelDLL name 'CeUnmountDBVol';
  409. function CeFlushDBVol(pguid:PCEGUID):Boolean; external KernelDLL name 'CeFlushDBVol';
  410. function CeEnumDBVolumes(pguid:PCEGUID; lpBuf:LPWSTR; dwSize:DWORD):Boolean; external KernelDLL name 'CeEnumDBVolumes';
  411. function CeFreeNotification(pRequest:PCENOTIFYREQUEST; pNotify:PCENOTIFICATION):Boolean; external KernelDLL name 'CeFreeNotification';
  412. const
  413. OBJTYPE_INVALID = 0;
  414. OBJTYPE_FILE = 1;
  415. OBJTYPE_DIRECTORY = 2;
  416. OBJTYPE_DATABASE = 3;
  417. OBJTYPE_RECORD = 4;
  418. type
  419. CEOIDINFO = record
  420. wObjType : WORD; //Type of object
  421. // OBJTYPE_INVALID : There was no valid object with this CEOID
  422. // OBJTYPE_FILE : The object is a file
  423. // OBJTYPE_DIRECTORY : The object is a directory
  424. // OBJTYPE_DATABASE : The object is a database
  425. // OBJTYPE_RECORD : The object is a record inside a database
  426. wPad : WORD; // dword alignment
  427. case longint of //This is a union
  428. 0 : ( infFile : CEFILEINFO ); //Valid for file objects
  429. 1 : ( infDirectory : CEDIRINFO; ); //Valid for directory objects
  430. //IF FILESYS_FSDBASE
  431. 2 : ( infDatabase : CEDBASEINFO; ); //Valid for database objects
  432. 3 : ( infRecord : CERECORDINFO;); //Valid for record objects
  433. end;
  434. _CEOIDINFO = CEOIDINFO;
  435. PCEOIDINFO = ^CEOIDINFO;
  436. TCEOIDINFO = CEOIDINFO;
  437. const CEOIDINFOEX_VERSION = 1;
  438. type CEOIDINFOEX = record
  439. wVersion : Word; //Version of this structure.
  440. // OBJTYPE_INVALID : There was no valid object with this CEOID
  441. // OBJTYPE_FILE : The object is a file
  442. // OBJTYPE_DIRECTORY : The object is a directory
  443. // OBJTYPE_DATABASE : The object is a database
  444. // OBJTYPE_RECORD : The object is a record inside a database
  445. wObjType : Word; //Type of object
  446. case longint of
  447. 0 : ( infFile : CEFILEINFO ); //Valid for file objects
  448. 1 : ( infDirectory : CEDIRINFO; ); //Valid for directory objects
  449. //IF FILESYS_FSDBASE
  450. 2 : ( infDatabase : CEDBASEINFOEX; ); //Valid for database objects
  451. 3 : ( infRecord : CERECORDINFO; ); //Valid for record objects
  452. end;
  453. _CEOIDINFOEX = CEOIDINFOEX;
  454. PCEOIDINFOEX = ^CEOIDINFOEX;
  455. TCEOIDINFOEX = CEOIDINFOEX;
  456. // Functions
  457. function CeOidGetInfoEx2(pguid:PCEGUID; oid:CEOID; var oidInfo:CEOIDINFOEX):Boolean; external KernelDLL name 'CeOidGetInfoEx2';
  458. function CeOidGetInfoEx2(pguid:PCEGUID; oid:CEOID; oidInfo:PCEOIDINFOEX):Boolean; external KernelDLL name 'CeOidGetInfoEx2';
  459. function CeOidGetInfoEx(pguid:PCEGUID; oid:CEOID; var oidInfo:CEOIDINFO):Boolean; external KernelDLL name 'CeOidGetInfoEx';
  460. function CeOidGetInfo(oid:CEOID; var oidInfo:CEOIDINFO):Boolean; external KernelDLL name 'CeOidGetInfo';
  461. {$ifdef EDB}
  462. {$I windbase_edb.inc}
  463. {$endif} //EDB
  464. //{$ifdef WINCEOEM}
  465. //{$include <pwindbas.h> // internal defines }
  466. //{$ifdef WINCEMACRO}
  467. //{$include <mwindbas.h>}
  468. //{$endif}
  469. //{$endif}
  470. // { @CESYSGEN ENDIF }
  471. //{$endif}
  472. implementation
  473. function TypeFromPropID(propid : longint) : WORD;
  474. begin
  475. TypeFromPropID := LOWORD(propid);
  476. end;
  477. procedure CREATE_SYSTEMGUID(out pguid : CEGUID);
  478. begin
  479. fillchar(pguid,sizeof(CEGUID),0);
  480. end;
  481. procedure CREATE_INVALIDGUID(out pguid : CEGUID);
  482. begin
  483. fillchar(pguid,sizeof(CEGUID),-(1));
  484. end;
  485. function CHECK_SYSTEMGUID(pguid : PCEGUID) : longint;
  486. begin
  487. CHECK_SYSTEMGUID:= not( (((pguid^.Data1) or (pguid^.Data2)) or (pguid^.Data3)) or (pguid^.Data4) );
  488. end;
  489. function CHECK_INVALIDGUID(pguid : PCEGUID) : longint;
  490. begin
  491. CHECK_INVALIDGUID:= not( not ((((pguid^.Data1) and (pguid^.Data2)) and (pguid^.Data3)) and (pguid^.Data4) ) );
  492. end;
  493. end.