Implement A->W call for GetNamedSecurityInfo.
[wine] / dlls / d3dxof / d3dxof.c
1 /*
2  * Implementation of DirectX File Interfaces
3  *
4  * Copyright 2004 Christian Costa
5  *
6  * This file contains the (internal) driver registration functions,
7  * driver enumeration APIs and DirectDraw creation functions.
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  */
23
24 #include "config.h"
25 #include "wine/debug.h"
26
27 #include "winbase.h"
28 #include "wingdi.h"
29
30 #include "d3dxof_private.h"
31 #include "dxfile.h"
32
33 WINE_DEFAULT_DEBUG_CHANNEL(d3dxof);
34
35 static struct ICOM_VTABLE(IDirectXFile) IDirectXFile_Vtbl;
36 static struct ICOM_VTABLE(IDirectXFileBinary) IDirectXFileBinary_Vtbl;
37 static struct ICOM_VTABLE(IDirectXFileData) IDirectXFileData_Vtbl;
38 static struct ICOM_VTABLE(IDirectXFileDataReference) IDirectXFileDataReference_Vtbl;
39 static struct ICOM_VTABLE(IDirectXFileEnumObject) IDirectXFileEnumObject_Vtbl;
40 static struct ICOM_VTABLE(IDirectXFileObject) IDirectXFileObject_Vtbl;
41 static struct ICOM_VTABLE(IDirectXFileSaveObject) IDirectXFileSaveObject_Vtbl;
42
43 HRESULT IDirectXFileImpl_Create(IUnknown* pUnkOuter, LPVOID* ppObj)
44 {
45     IDirectXFileImpl* object;
46
47     TRACE("(%p,%p)\n", pUnkOuter, ppObj);
48       
49     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileImpl));
50     
51     object->lpVtbl.lpVtbl = &IDirectXFile_Vtbl;
52     object->ref = 1;
53
54     *ppObj = object;
55     
56     return S_OK;
57 }
58
59 /*** IUnknown methods ***/
60 static HRESULT WINAPI IDirectXFileImpl_QueryInterface(IDirectXFile* iface, REFIID riid, void** ppvObject)
61 {
62   ICOM_THIS(IDirectXFileImpl, iface);
63
64   TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
65
66   if (IsEqualGUID(riid, &IID_IUnknown)
67       || IsEqualGUID(riid, &IID_IDirectXFile))
68   {
69     IClassFactory_AddRef(iface);
70     *ppvObject = This;
71     return S_OK;
72   }
73
74   ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
75   return E_NOINTERFACE;
76 }
77
78 static ULONG WINAPI IDirectXFileImpl_AddRef(IDirectXFile* iface)
79 {
80   ICOM_THIS(IDirectXFileImpl, iface);
81
82   TRACE("(%p/%p)\n", iface, This); 
83
84   This->ref++;
85   return S_OK;
86 }
87
88 static ULONG WINAPI IDirectXFileImpl_Release(IDirectXFile* iface)
89 {
90   ICOM_THIS(IDirectXFileImpl, iface);
91
92   TRACE("(%p/%p)\n", iface, This); 
93
94   if (!--This->ref)
95     HeapFree(GetProcessHeap(), 0, This);
96
97   return S_OK;
98 }
99
100 /*** IDirectXFile methods ***/
101 static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject(IDirectXFile* iface, LPVOID pvSource, DXFILELOADOPTIONS dwLoadOptions, LPDIRECTXFILEENUMOBJECT* ppEnumObj)
102
103 {
104   ICOM_THIS(IDirectXFileImpl, iface);
105   IDirectXFileEnumObjectImpl* object; 
106
107   FIXME("(%p/%p)->(%p,%lx,%p) stub!\n", This, iface, pvSource, dwLoadOptions, ppEnumObj); 
108
109   if (dwLoadOptions == 0)
110   {
111     FIXME("Source is a file '%s'\n", (char*)pvSource);
112   }
113
114   object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileEnumObjectImpl));
115
116   object->lpVtbl.lpVtbl = &IDirectXFileEnumObject_Vtbl;
117   object->ref = 1;
118
119   *ppEnumObj = (LPDIRECTXFILEENUMOBJECT)object;
120     
121   return S_FALSE;
122 }
123
124 static HRESULT WINAPI IDirectXFileImpl_CreateSaveObject(IDirectXFile* iface, LPCSTR szFileName, DXFILEFORMAT dwFileFormat, LPDIRECTXFILESAVEOBJECT* ppSaveObj)
125 {
126   ICOM_THIS(IDirectXFileImpl, iface);
127
128   FIXME("(%p/%p)->(%s,%lx,%p) stub!\n", This, iface, szFileName, dwFileFormat, ppSaveObj); 
129
130   return S_FALSE;
131 }
132
133 static HRESULT WINAPI IDirectXFileImpl_RegisterTemplates(IDirectXFile* iface, LPVOID pvData, DWORD cbSize)
134 {
135   ICOM_THIS(IDirectXFileImpl, iface);
136
137   FIXME("(%p/%p)->(%p,%ld) stub!\n", This, iface, pvData, cbSize); 
138
139   return S_FALSE;
140 }
141
142 static ICOM_VTABLE(IDirectXFile) IDirectXFile_Vtbl =
143 {
144   ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
145   IDirectXFileImpl_QueryInterface,
146   IDirectXFileImpl_AddRef,
147   IDirectXFileImpl_Release,
148   IDirectXFileImpl_CreateEnumObject,
149   IDirectXFileImpl_CreateSaveObject,
150   IDirectXFileImpl_RegisterTemplates
151 };
152
153 HRESULT IDirectXFileBinaryImpl_Create(IDirectXFileBinaryImpl** ppObj)
154 {
155     IDirectXFileBinaryImpl* object;
156
157     TRACE("(%p)\n", ppObj);
158       
159     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileBinaryImpl));
160     
161     object->lpVtbl.lpVtbl = &IDirectXFileBinary_Vtbl;
162     object->ref = 1;
163
164     *ppObj = object;
165     
166     return S_OK;
167 }
168
169 /*** IUnknown methods ***/
170 static HRESULT WINAPI IDirectXFileBinaryImpl_QueryInterface(IDirectXFileBinary* iface, REFIID riid, void** ppvObject)
171 {
172   ICOM_THIS(IDirectXFileBinaryImpl, iface);
173
174   TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
175
176   if (IsEqualGUID(riid, &IID_IUnknown)
177       || IsEqualGUID(riid, &IID_IDirectXFileObject)
178       || IsEqualGUID(riid, &IID_IDirectXFileBinary))
179   {
180     IClassFactory_AddRef(iface);
181     *ppvObject = This;
182     return S_OK;
183   }
184
185   ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
186   return E_NOINTERFACE;
187 }
188
189 static ULONG WINAPI IDirectXFileBinaryImpl_AddRef(IDirectXFileBinary* iface)
190 {
191   ICOM_THIS(IDirectXFileBinaryImpl, iface);
192
193   TRACE("(%p/%p)\n", iface, This); 
194
195   This->ref++;
196   return S_OK;
197 }
198
199 static ULONG WINAPI IDirectXFileBinaryImpl_Release(IDirectXFileBinary* iface)
200 {
201   ICOM_THIS(IDirectXFileBinaryImpl, iface);
202
203   TRACE("(%p/%p)\n", iface, This); 
204
205   if (!--This->ref)
206     HeapFree(GetProcessHeap(), 0, This);
207
208   return S_OK;
209 }
210
211 /*** IDirectXFileObject methods ***/
212 static HRESULT WINAPI IDirectXFileBinaryImpl_GetName(IDirectXFileBinary* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
213
214 {
215   ICOM_THIS(IDirectXFileBinaryImpl, iface);
216
217   FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen); 
218
219   return S_FALSE;
220 }
221
222 static HRESULT WINAPI IDirectXFileBinaryImpl_GetId(IDirectXFileBinary* iface, LPGUID pGuid)
223 {
224   ICOM_THIS(IDirectXFileBinaryImpl, iface);
225
226   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid); 
227
228   return S_FALSE;
229 }
230
231 /*** IDirectXFileBinary methods ***/
232 static HRESULT WINAPI IDirectXFileBinaryImpl_GetSize(IDirectXFileBinary* iface, DWORD* pcbSize)
233 {
234   ICOM_THIS(IDirectXFileBinaryImpl, iface);
235
236   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pcbSize); 
237
238   return S_FALSE;
239 }
240
241 static HRESULT WINAPI IDirectXFileBinaryImpl_GetMimeType(IDirectXFileBinary* iface, LPCSTR* pszMimeType)
242 {
243   ICOM_THIS(IDirectXFileBinaryImpl, iface);
244
245   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pszMimeType);
246
247   return S_FALSE;
248 }
249
250 static HRESULT WINAPI IDirectXFileBinaryImpl_Read(IDirectXFileBinary* iface, LPVOID pvData, DWORD cbSize, LPDWORD pcbRead)
251 {
252   ICOM_THIS(IDirectXFileBinaryImpl, iface);
253
254   FIXME("(%p/%p)->(%p, %ld, %p) stub!\n", This, iface, pvData, cbSize, pcbRead); 
255
256   return S_FALSE;
257 }
258
259 static ICOM_VTABLE(IDirectXFileBinary) IDirectXFileBinary_Vtbl =
260 {
261     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
262     IDirectXFileBinaryImpl_QueryInterface,
263     IDirectXFileBinaryImpl_AddRef,
264     IDirectXFileBinaryImpl_Release,
265     IDirectXFileBinaryImpl_GetName,
266     IDirectXFileBinaryImpl_GetId,
267     IDirectXFileBinaryImpl_GetSize,
268     IDirectXFileBinaryImpl_GetMimeType,
269     IDirectXFileBinaryImpl_Read
270 };
271
272 HRESULT IDirectXFileDataImpl_Create(IDirectXFileDataImpl** ppObj)
273 {
274     IDirectXFileDataImpl* object;
275
276     TRACE("(%p)\n", ppObj);
277       
278     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileDataImpl));
279     
280     object->lpVtbl.lpVtbl = &IDirectXFileData_Vtbl;
281     object->ref = 1;
282
283     *ppObj = object;
284     
285     return S_OK;
286 }
287
288 /*** IUnknown methods ***/
289 static HRESULT WINAPI IDirectXFileDataImpl_QueryInterface(IDirectXFileData* iface, REFIID riid, void** ppvObject)
290 {
291   ICOM_THIS(IDirectXFileDataImpl, iface);
292
293   TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
294
295   if (IsEqualGUID(riid, &IID_IUnknown)
296       || IsEqualGUID(riid, &IID_IDirectXFileObject)
297       || IsEqualGUID(riid, &IID_IDirectXFileData))
298   {
299     IClassFactory_AddRef(iface);
300     *ppvObject = This;
301     return S_OK;
302   }
303
304   ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
305   return E_NOINTERFACE;
306 }
307
308 static ULONG WINAPI IDirectXFileDataImpl_AddRef(IDirectXFileData* iface)
309 {
310   ICOM_THIS(IDirectXFileDataImpl, iface);
311
312   TRACE("(%p/%p)\n", iface, This); 
313
314   This->ref++;
315   return S_OK;
316 }
317
318 static ULONG WINAPI IDirectXFileDataImpl_Release(IDirectXFileData* iface)
319 {
320   ICOM_THIS(IDirectXFileDataImpl, iface);
321
322   TRACE("(%p/%p)\n", iface, This); 
323
324   if (!--This->ref)
325     HeapFree(GetProcessHeap(), 0, This);
326
327   return S_OK;
328 }
329
330 /*** IDirectXFileObject methods ***/
331 static HRESULT WINAPI IDirectXFileDataImpl_GetName(IDirectXFileData* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
332
333 {
334   ICOM_THIS(IDirectXFileDataImpl, iface);
335
336   FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen); 
337
338   return S_FALSE;
339 }
340
341 static HRESULT WINAPI IDirectXFileDataImpl_GetId(IDirectXFileData* iface, LPGUID pGuid)
342 {
343   ICOM_THIS(IDirectXFileDataImpl, iface);
344
345   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid); 
346
347   return S_FALSE;
348 }
349
350 /*** IDirectXFileData methods ***/
351 static HRESULT WINAPI IDirectXFileDataImpl_GetData(IDirectXFileData* iface, LPCSTR szMember, DWORD* pcbSize, void** ppvData)
352 {
353   ICOM_THIS(IDirectXFileDataImpl, iface);
354
355   FIXME("(%p/%p)->(%s,%p,%p) stub!\n", This, iface, szMember, pcbSize, ppvData); 
356
357   return S_FALSE;
358 }
359
360 static HRESULT WINAPI IDirectXFileDataImpl_GetType(IDirectXFileData* iface, const GUID** pguid)
361 {
362   ICOM_THIS(IDirectXFileDataImpl, iface);
363
364   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pguid); 
365
366   return S_FALSE;
367 }
368
369 static HRESULT WINAPI IDirectXFileDataImpl_GetNextObject(IDirectXFileData* iface, LPDIRECTXFILEOBJECT* ppChildObj)
370 {
371   ICOM_THIS(IDirectXFileDataImpl, iface);
372
373   FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppChildObj); 
374
375   return S_FALSE;
376 }
377
378 static HRESULT WINAPI IDirectXFileDataImpl_AddDataObject(IDirectXFileData* iface, LPDIRECTXFILEDATA pDataObj)
379 {
380   ICOM_THIS(IDirectXFileDataImpl, iface);
381
382   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pDataObj); 
383
384   return S_FALSE;
385 }
386
387 static HRESULT WINAPI IDirectXFileDataImpl_AddDataReference(IDirectXFileData* iface, LPCSTR szRef, const GUID* pguidRef)
388 {
389   ICOM_THIS(IDirectXFileDataImpl, iface);
390
391   FIXME("(%p/%p)->(%s,%p) stub!\n", This, iface, szRef, pguidRef); 
392
393   return S_FALSE;
394 }
395
396 static HRESULT WINAPI IDirectXFileDataImpl_AddBinaryObject(IDirectXFileData* iface, LPCSTR szName, const GUID* pguid, LPCSTR szMimeType, LPVOID pvData, DWORD cbSize)
397 {
398   ICOM_THIS(IDirectXFileDataImpl, iface);
399
400   FIXME("(%p/%p)->(%s,%p,%s,%p,%ld) stub!\n", This, iface, szName, pguid, szMimeType, pvData, cbSize);
401
402   return S_FALSE;
403 }
404
405 static ICOM_VTABLE(IDirectXFileData) IDirectXFileData_Vtbl =
406 {
407     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
408     IDirectXFileDataImpl_QueryInterface,
409     IDirectXFileDataImpl_AddRef,
410     IDirectXFileDataImpl_Release,
411     IDirectXFileDataImpl_GetName,
412     IDirectXFileDataImpl_GetId,
413     IDirectXFileDataImpl_GetData,
414     IDirectXFileDataImpl_GetType,
415     IDirectXFileDataImpl_GetNextObject,
416     IDirectXFileDataImpl_AddDataObject,
417     IDirectXFileDataImpl_AddDataReference,
418     IDirectXFileDataImpl_AddBinaryObject
419 };
420
421 HRESULT IDirectXFileDataReferenceImpl_Create(IDirectXFileDataReferenceImpl** ppObj)
422 {
423     IDirectXFileDataReferenceImpl* object;
424
425     TRACE("(%p)\n", ppObj);
426       
427     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileDataReferenceImpl));
428     
429     object->lpVtbl.lpVtbl = &IDirectXFileDataReference_Vtbl;
430     object->ref = 1;
431
432     *ppObj = object;
433     
434     return S_OK;
435 }
436
437 /*** IUnknown methods ***/
438 static HRESULT WINAPI IDirectXFileDataReferenceImpl_QueryInterface(IDirectXFileDataReference* iface, REFIID riid, void** ppvObject)
439 {
440   ICOM_THIS(IDirectXFileDataReferenceImpl, iface);
441
442   TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
443
444   if (IsEqualGUID(riid, &IID_IUnknown)
445       || IsEqualGUID(riid, &IID_IDirectXFileObject)
446       || IsEqualGUID(riid, &IID_IDirectXFileDataReference))
447   {
448     IClassFactory_AddRef(iface);
449     *ppvObject = This;
450     return S_OK;
451   }
452
453   ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
454   return E_NOINTERFACE;
455 }
456
457 static ULONG WINAPI IDirectXFileDataReferenceImpl_AddRef(IDirectXFileDataReference* iface)
458 {
459   ICOM_THIS(IDirectXFileDataReferenceImpl, iface);
460
461   TRACE("(%p/%p)\n", iface, This); 
462
463   This->ref++;
464   return S_OK;
465 }
466
467 static ULONG WINAPI IDirectXFileDataReferenceImpl_Release(IDirectXFileDataReference* iface)
468 {
469   ICOM_THIS(IDirectXFileDataReferenceImpl, iface);
470
471   TRACE("(%p/%p)\n", iface, This); 
472
473   if (!--This->ref)
474     HeapFree(GetProcessHeap(), 0, This);
475
476   return S_OK;
477 }
478
479 /*** IDirectXFileObject methods ***/
480 static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetName(IDirectXFileDataReference* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
481 {
482   ICOM_THIS(IDirectXFileDataReferenceImpl, iface);
483
484   FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen); 
485
486   return S_FALSE;
487 }
488
489 static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetId(IDirectXFileDataReference* iface, LPGUID pGuid)
490 {
491   ICOM_THIS(IDirectXFileDataReferenceImpl, iface);
492
493   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid); 
494
495   return S_FALSE;
496 }
497
498 /*** IDirectXFileDataReference ***/
499 static HRESULT WINAPI IDirectXFileDataReferenceImpl_Resolve(IDirectXFileDataReference* iface, LPDIRECTXFILEDATA* ppDataObj)
500 {
501   ICOM_THIS(IDirectXFileDataReferenceImpl, iface);
502
503   FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppDataObj); 
504
505   return S_FALSE;
506 }
507
508 static ICOM_VTABLE(IDirectXFileDataReference) IDirectXFileDataReference_Vtbl =
509 {
510     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
511     IDirectXFileDataReferenceImpl_QueryInterface,
512     IDirectXFileDataReferenceImpl_AddRef,
513     IDirectXFileDataReferenceImpl_Release,
514     IDirectXFileDataReferenceImpl_GetName,
515     IDirectXFileDataReferenceImpl_GetId,
516     IDirectXFileDataReferenceImpl_Resolve
517 };
518
519 HRESULT IDirectXFileEnumObjectImpl_Create(IDirectXFileEnumObjectImpl** ppObj)
520 {
521     IDirectXFileEnumObjectImpl* object;
522
523     TRACE("(%p)\n", ppObj);
524       
525     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileEnumObjectImpl));
526     
527     object->lpVtbl.lpVtbl = &IDirectXFileEnumObject_Vtbl;
528     object->ref = 1;
529
530     *ppObj = object;
531     
532     return S_OK;
533 }
534
535 /*** IUnknown methods ***/
536 static HRESULT WINAPI IDirectXFileEnumObjectImpl_QueryInterface(IDirectXFileEnumObject* iface, REFIID riid, void** ppvObject)
537 {
538   ICOM_THIS(IDirectXFileEnumObjectImpl, iface);
539
540   TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
541
542   if (IsEqualGUID(riid, &IID_IUnknown)
543       || IsEqualGUID(riid, &IID_IDirectXFileEnumObject))
544   {
545     IClassFactory_AddRef(iface);
546     *ppvObject = This;
547     return S_OK;
548   }
549
550   ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
551   return E_NOINTERFACE;
552 }
553
554 static ULONG WINAPI IDirectXFileEnumObjectImpl_AddRef(IDirectXFileEnumObject* iface)
555 {
556   ICOM_THIS(IDirectXFileEnumObjectImpl, iface);
557
558   TRACE("(%p/%p)\n", iface, This); 
559
560   This->ref++;
561   return S_OK;
562 }
563
564 static ULONG WINAPI IDirectXFileEnumObjectImpl_Release(IDirectXFileEnumObject* iface)
565 {
566   ICOM_THIS(IDirectXFileEnumObjectImpl, iface);
567
568   TRACE("(%p/%p)\n", iface, This); 
569
570   if (!--This->ref)
571     HeapFree(GetProcessHeap(), 0, This);
572
573   return S_OK;
574 }
575
576 /*** IDirectXFileEnumObject methods ***/
577 static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileEnumObject* iface, LPDIRECTXFILEDATA* ppDataObj)
578 {
579   ICOM_THIS(IDirectXFileEnumObjectImpl, iface);
580   IDirectXFileDataImpl* object;
581   
582   FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppDataObj); 
583
584   object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileDataImpl));
585
586   object->lpVtbl.lpVtbl = &IDirectXFileData_Vtbl;
587   object->ref = 1;
588
589   *ppDataObj = (LPDIRECTXFILEDATA)object;
590
591   return S_FALSE;
592 }
593
594 static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectById(IDirectXFileEnumObject* iface, REFGUID rguid, LPDIRECTXFILEDATA* ppDataObj)
595 {
596   ICOM_THIS(IDirectXFileEnumObjectImpl, iface);
597
598   FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, rguid, ppDataObj); 
599
600   return S_FALSE;
601 }
602
603 static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectByName(IDirectXFileEnumObject* iface, LPCSTR szName, LPDIRECTXFILEDATA* ppDataObj)
604 {
605   ICOM_THIS(IDirectXFileEnumObjectImpl, iface);
606
607   FIXME("(%p/%p)->(%s,%p) stub!\n", This, iface, szName, ppDataObj); 
608
609   return S_FALSE;
610 }
611
612 static ICOM_VTABLE(IDirectXFileEnumObject) IDirectXFileEnumObject_Vtbl =
613 {
614     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
615     IDirectXFileEnumObjectImpl_QueryInterface,
616     IDirectXFileEnumObjectImpl_AddRef,
617     IDirectXFileEnumObjectImpl_Release,
618     IDirectXFileEnumObjectImpl_GetNextDataObject,
619     IDirectXFileEnumObjectImpl_GetDataObjectById,
620     IDirectXFileEnumObjectImpl_GetDataObjectByName
621 };
622
623 HRESULT IDirectXFileObjectImpl_Create(IDirectXFileObjectImpl** ppObj)
624 {
625     IDirectXFileObjectImpl* object;
626
627     TRACE("(%p)\n", ppObj);
628       
629     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileObjectImpl));
630     
631     object->lpVtbl.lpVtbl = &IDirectXFileObject_Vtbl;
632     object->ref = 1;
633
634     *ppObj = object;
635     
636     return S_OK;
637 }
638
639 /*** IUnknown methods ***/
640 static HRESULT WINAPI IDirectXFileObjectImpl_QueryInterface(IDirectXFileObject* iface, REFIID riid, void** ppvObject)
641 {
642   ICOM_THIS(IDirectXFileObjectImpl, iface);
643
644   TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
645
646   if (IsEqualGUID(riid, &IID_IUnknown)
647       || IsEqualGUID(riid, &IID_IDirectXFileObject))
648   {
649     IClassFactory_AddRef(iface);
650     *ppvObject = This;
651     return S_OK;
652   }
653
654   ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
655   return E_NOINTERFACE;
656 }
657
658 static ULONG WINAPI IDirectXFileObjectImpl_AddRef(IDirectXFileObject* iface)
659 {
660   ICOM_THIS(IDirectXFileObjectImpl, iface);
661
662   TRACE("(%p/%p)\n", iface, This); 
663
664   This->ref++;
665   return S_OK;
666 }
667
668 static ULONG WINAPI IDirectXFileObjectImpl_Release(IDirectXFileObject* iface)
669 {
670   ICOM_THIS(IDirectXFileObjectImpl, iface);
671
672   TRACE("(%p/%p)\n", iface, This); 
673
674   if (!--This->ref)
675     HeapFree(GetProcessHeap(), 0, This);
676
677   return S_OK;
678 }
679
680 /*** IDirectXFileObject methods ***/
681 static HRESULT WINAPI IDirectXFileObjectImpl_GetName(IDirectXFileObject* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
682 {
683   ICOM_THIS(IDirectXFileDataReferenceImpl, iface);
684
685   FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen); 
686
687   return S_FALSE;
688 }
689
690 static HRESULT WINAPI IDirectXFileObjectImpl_GetId(IDirectXFileObject* iface, LPGUID pGuid)
691 {
692   ICOM_THIS(IDirectXFileObjectImpl, iface);
693
694   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid); 
695
696   return S_FALSE;
697 }
698
699 static ICOM_VTABLE(IDirectXFileObject) IDirectXFileObject_Vtbl =
700 {
701     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
702     IDirectXFileObjectImpl_QueryInterface,
703     IDirectXFileObjectImpl_AddRef,
704     IDirectXFileObjectImpl_Release,
705     IDirectXFileObjectImpl_GetName,
706     IDirectXFileObjectImpl_GetId
707 };
708
709 HRESULT IDirectXFileSaveObjectImpl_Create(IDirectXFileSaveObjectImpl** ppObj)
710 {
711     IDirectXFileSaveObjectImpl* object;
712
713     TRACE("(%p)\n", ppObj);
714
715     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileSaveObjectImpl));
716     
717     object->lpVtbl.lpVtbl = &IDirectXFileSaveObject_Vtbl;
718     object->ref = 1;
719
720     *ppObj = object;
721     
722     return S_OK;
723 }
724
725 /*** IUnknown methods ***/
726 static HRESULT WINAPI IDirectXFileSaveObjectImpl_QueryInterface(IDirectXFileSaveObject* iface, REFIID riid, void** ppvObject)
727 {
728   ICOM_THIS(IDirectXFileSaveObjectImpl, iface);
729
730   TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
731
732   if (IsEqualGUID(riid, &IID_IUnknown)
733       || IsEqualGUID(riid, &IID_IDirectXFileSaveObject))
734   {
735     IClassFactory_AddRef(iface);
736     *ppvObject = This;
737     return S_OK;
738   }
739
740   ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
741   return E_NOINTERFACE;
742 }
743
744 static ULONG WINAPI IDirectXFileSaveObjectImpl_AddRef(IDirectXFileSaveObject* iface)
745 {
746   ICOM_THIS(IDirectXFileSaveObjectImpl, iface);
747
748   TRACE("(%p/%p)\n", iface, This); 
749
750   This->ref++;
751   return S_OK;
752 }
753
754 static ULONG WINAPI IDirectXFileSaveObjectImpl_Release(IDirectXFileSaveObject* iface)
755 {
756   ICOM_THIS(IDirectXFileSaveObjectImpl, iface);
757
758   TRACE("(%p/%p)\n", iface, This); 
759
760   if (!--This->ref)
761     HeapFree(GetProcessHeap(), 0, This);
762
763   return S_OK;
764 }
765
766 static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveTemplates(IDirectXFileSaveObject* iface, DWORD cTemplates, const GUID** ppguidTemplates)
767 {
768   ICOM_THIS(IDirectXFileSaveObjectImpl, iface);
769
770   FIXME("(%p/%p)->(%ld,%p) stub!\n", This, iface, cTemplates, ppguidTemplates); 
771
772   return S_FALSE;
773 }
774
775 static HRESULT WINAPI IDirectXFileSaveObjectImpl_CreateDataObject(IDirectXFileSaveObject* iface, REFGUID rguidTemplate, LPCSTR szName, const GUID* pguid, DWORD cbSize, LPVOID pvData, LPDIRECTXFILEDATA* ppDataObj)
776 {
777   ICOM_THIS(IDirectXFileSaveObjectImpl, iface);
778
779   FIXME("(%p/%p)->(%p,%s,%p,%ld,%p,%p) stub!\n", This, iface, rguidTemplate, szName, pguid, cbSize, pvData, ppDataObj); 
780
781   return S_FALSE;
782 }
783
784 static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveData(IDirectXFileSaveObject* iface, LPDIRECTXFILEDATA ppDataObj)
785 {
786   ICOM_THIS(IDirectXFileSaveObjectImpl, iface);
787
788   FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppDataObj); 
789
790   return S_FALSE;
791 }
792
793 static ICOM_VTABLE(IDirectXFileSaveObject) IDirectXFileSaveObject_Vtbl =
794 {
795     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
796     IDirectXFileSaveObjectImpl_QueryInterface,
797     IDirectXFileSaveObjectImpl_AddRef,
798     IDirectXFileSaveObjectImpl_Release,
799     IDirectXFileSaveObjectImpl_SaveTemplates,
800     IDirectXFileSaveObjectImpl_CreateDataObject,
801     IDirectXFileSaveObjectImpl_SaveData
802 };