| /* | 
 |  * Copyright (C) 2006 Mike McCormack | 
 |  * | 
 |  * This library is free software; you can redistribute it and/or | 
 |  * modify it under the terms of the GNU Lesser General Public | 
 |  * License as published by the Free Software Foundation; either | 
 |  * version 2.1 of the License, or (at your option) any later version. | 
 |  * | 
 |  * This library 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.  See the GNU | 
 |  * Lesser General Public License for more details. | 
 |  * | 
 |  * You should have received a copy of the GNU Lesser General Public | 
 |  * License along with this library; if not, write to the Free Software | 
 |  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
 |  */ | 
 |  | 
 | typedef DWORD DBKIND; | 
 |  | 
 | enum DBKINDENUM { | 
 |     DBKIND_GUID_NAME, | 
 |     DBKIND_GUID_PROPID, | 
 |     DBKIND_NAME, | 
 |     DBKIND_PGUID_NAME, | 
 |     DBKIND_PGUID_PROPID, | 
 |     DBKIND_PROPID, | 
 |     DBKIND_GUID, | 
 | }; | 
 |  | 
 | typedef struct tagDBID { | 
 |     [switch_type(DBKIND), switch_is(eKind)] union | 
 |     { | 
 |     [case(DBKIND_GUID_NAME, DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_NAME, DBKIND_PROPID)] | 
 |         GUID guid; | 
 |     [case(DBKIND_PGUID_NAME, DBKIND_PGUID_PROPID)] | 
 |         GUID *pguid; | 
 |     [default] | 
 |         ; | 
 |     } uGuid; | 
 |     DBKIND eKind; | 
 |     [switch_type(DBKIND), switch_is(eKind)] union | 
 |     { | 
 |     [case(DBKIND_GUID_NAME, DBKIND_NAME, DBKIND_PGUID_NAME)] | 
 |         LPOLESTR pwszName; | 
 |     [case(DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_PGUID_PROPID, DBKIND_PROPID)] | 
 |         ULONG ulPropid; | 
 |     [default] | 
 |         ; | 
 |     } uName; | 
 | } DBID; | 
 |  | 
 | typedef DWORD DBPROPID; | 
 |  | 
 | typedef struct tagDBPROPIDSET { | 
 |     [size_is(cPropertyIDs)] DBPROPID *rgPropertyIDs; | 
 |     ULONG cPropertyIDs; | 
 |     GUID guidPropertySet; | 
 | } DBPROPIDSET; | 
 |  | 
 | typedef DWORD DBPROPOPTIONS; | 
 |  | 
 | enum DBPROPOPTIONENUM { | 
 |     DBPROPOPTIONS_REQUIRED = 0, | 
 |     DBPROPOPTIONS_SETIFCHEAP = 1, | 
 |     DBPROPOPTIONS_OPTIONAL = 1, | 
 | }; | 
 |  | 
 | typedef DWORD DBPROPSTATUS; | 
 |  | 
 | typedef struct tagDBPROP { | 
 |     DBPROPID dwPropertyID; | 
 |     DBPROPOPTIONS dwOptions; | 
 |     DBPROPSTATUS dwStatus; | 
 |     DBID colid; | 
 |     VARIANT vValue; | 
 | } DBPROP; | 
 |  | 
 | typedef struct tagDBPROPSET { | 
 |     [size_is(cProperties)] DBPROP *rgProperties; | 
 |     ULONG cProperties; | 
 |     GUID guidPropertySet; | 
 | } DBPROPSET; | 
 |  | 
 | typedef DWORD DBPROPFLAGS; | 
 |  | 
 | typedef struct tagDBPROPINFO { | 
 |     LPOLESTR pwszDescription; | 
 |     DBPROPID dwPropertyID; | 
 |     DBPROPFLAGS dwFlags; | 
 |     VARTYPE vtType; | 
 |     VARIANT vValues; | 
 | } DBPROPINFO; | 
 |  | 
 | typedef DBPROPINFO *PDBPROPINFO; | 
 |  | 
 | typedef struct tagDBPROPINFOSET { | 
 |     [size_is(cPropertyInfos)] PDBPROPINFO rgPropertyInfos; | 
 |     ULONG cPropertyInfos; | 
 |     GUID guidPropertySet; | 
 | } DBPROPINFOSET; |