[PATCH 7/9] sapi: Add a stub SpObjectTokenCategory object implementation.
Huw Davies
huw at codeweavers.com
Thu Sep 28 02:40:52 CDT 2017
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
dlls/sapi/main.c | 3 +
dlls/sapi/sapi_private.h | 1 +
dlls/sapi/token.c | 225 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 229 insertions(+)
diff --git a/dlls/sapi/main.c b/dlls/sapi/main.c
index ea164a5..5ad6b63 100644
--- a/dlls/sapi/main.c
+++ b/dlls/sapi/main.c
@@ -107,6 +107,7 @@ static const struct IClassFactoryVtbl class_factory_vtbl =
};
static struct class_factory data_key_cf = { { &class_factory_vtbl }, data_key_create };
+static struct class_factory token_category_cf = { { &class_factory_vtbl }, token_category_create };
static struct class_factory token_enum_cf = { { &class_factory_vtbl }, token_enum_create };
/******************************************************************
@@ -120,6 +121,8 @@ HRESULT WINAPI DllGetClassObject( REFCLSID clsid, REFIID iid, void **obj )
if (IsEqualCLSID( clsid, &CLSID_SpDataKey ))
cf = &data_key_cf.IClassFactory_iface;
+ else if (IsEqualCLSID( clsid, &CLSID_SpObjectTokenCategory ))
+ cf = &token_category_cf.IClassFactory_iface;
else if (IsEqualCLSID( clsid, &CLSID_SpObjectTokenEnum ))
cf = &token_enum_cf.IClassFactory_iface;
diff --git a/dlls/sapi/sapi_private.h b/dlls/sapi/sapi_private.h
index 0f6ca4a..5f78d12 100644
--- a/dlls/sapi/sapi_private.h
+++ b/dlls/sapi/sapi_private.h
@@ -21,6 +21,7 @@
#include "wine/unicode.h"
HRESULT data_key_create( IUnknown *outer, REFIID iid, void **obj ) DECLSPEC_HIDDEN;
+HRESULT token_category_create( IUnknown *outer, REFIID iid, void **obj ) DECLSPEC_HIDDEN;
HRESULT token_enum_create( IUnknown *outer, REFIID iid, void **obj ) DECLSPEC_HIDDEN;
static inline void * __WINE_ALLOC_SIZE(1) heap_alloc(size_t len)
diff --git a/dlls/sapi/token.c b/dlls/sapi/token.c
index 51d2ed1..b70dc50 100644
--- a/dlls/sapi/token.c
+++ b/dlls/sapi/token.c
@@ -227,6 +227,231 @@ HRESULT data_key_create( IUnknown *outer, REFIID iid, void **obj )
return hr;
}
+struct token_category
+{
+ ISpObjectTokenCategory ISpObjectTokenCategory_iface;
+ LONG ref;
+};
+
+struct token_category *impl_from_ISpObjectTokenCategory( ISpObjectTokenCategory *iface )
+{
+ return CONTAINING_RECORD( iface, struct token_category, ISpObjectTokenCategory_iface );
+}
+
+static HRESULT WINAPI token_category_QueryInterface( ISpObjectTokenCategory *iface,
+ REFIID iid, void **obj )
+{
+ struct token_category *This = impl_from_ISpObjectTokenCategory( iface );
+
+ TRACE( "(%p)->(%s %p)\n", This, debugstr_guid( iid ), obj );
+
+ if (IsEqualIID( iid, &IID_IUnknown ) ||
+ IsEqualIID( iid, &IID_ISpDataKey ) ||
+ IsEqualIID( iid, &IID_ISpObjectTokenCategory ))
+ {
+ ISpObjectTokenCategory_AddRef( iface );
+ *obj = iface;
+ return S_OK;
+ }
+
+ FIXME( "interface %s not implemented\n", debugstr_guid( iid ) );
+ *obj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI token_category_AddRef( ISpObjectTokenCategory *iface )
+{
+ struct token_category *This = impl_from_ISpObjectTokenCategory( iface );
+ ULONG ref = InterlockedIncrement( &This->ref );
+
+ TRACE( "(%p) ref = %u\n", This, ref );
+ return ref;
+}
+
+static ULONG WINAPI token_category_Release( ISpObjectTokenCategory *iface )
+{
+ struct token_category *This = impl_from_ISpObjectTokenCategory( iface );
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE( "(%p) ref = %u\n", This, ref );
+
+ if (!ref)
+ {
+ heap_free( This );
+ }
+ return ref;
+}
+
+static HRESULT WINAPI token_category_SetData( ISpObjectTokenCategory *iface,
+ LPCWSTR name, ULONG size,
+ const BYTE *data )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_GetData( ISpObjectTokenCategory *iface,
+ LPCWSTR name, ULONG *size,
+ BYTE *data )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_SetStringValue( ISpObjectTokenCategory *iface,
+ LPCWSTR name, LPCWSTR value )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_GetStringValue( ISpObjectTokenCategory *iface,
+ LPCWSTR name, LPWSTR *value )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_SetDWORD( ISpObjectTokenCategory *iface,
+ LPCWSTR name, DWORD value )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_GetDWORD( ISpObjectTokenCategory *iface,
+ LPCWSTR name, DWORD *pdwValue )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_OpenKey( ISpObjectTokenCategory *iface,
+ LPCWSTR name, ISpDataKey **sub_key )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_CreateKey( ISpObjectTokenCategory *iface,
+ LPCWSTR name, ISpDataKey **sub_key )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_DeleteKey( ISpObjectTokenCategory *iface,
+ LPCWSTR name )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_DeleteValue( ISpObjectTokenCategory *iface,
+ LPCWSTR name )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_EnumKeys( ISpObjectTokenCategory *iface,
+ ULONG index, LPWSTR *sub_key )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_EnumValues( ISpObjectTokenCategory *iface,
+ ULONG index, LPWSTR *value )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_SetId( ISpObjectTokenCategory *iface,
+ LPCWSTR id, BOOL create )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_GetId( ISpObjectTokenCategory *iface,
+ LPWSTR *id )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_GetDataKey( ISpObjectTokenCategory *iface,
+ SPDATAKEYLOCATION location,
+ ISpDataKey **data_key )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_EnumTokens( ISpObjectTokenCategory *iface,
+ LPCWSTR req, LPCWSTR opt,
+ IEnumSpObjectTokens **enum_tokens )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_SetDefaultTokenId( ISpObjectTokenCategory *iface,
+ LPCWSTR id )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI token_category_GetDefaultTokenId( ISpObjectTokenCategory *iface,
+ LPWSTR *id )
+{
+ FIXME( "stub\n" );
+ return E_NOTIMPL;
+}
+
+const struct ISpObjectTokenCategoryVtbl token_category_vtbl =
+{
+ token_category_QueryInterface,
+ token_category_AddRef,
+ token_category_Release,
+ token_category_SetData,
+ token_category_GetData,
+ token_category_SetStringValue,
+ token_category_GetStringValue,
+ token_category_SetDWORD,
+ token_category_GetDWORD,
+ token_category_OpenKey,
+ token_category_CreateKey,
+ token_category_DeleteKey,
+ token_category_DeleteValue,
+ token_category_EnumKeys,
+ token_category_EnumValues,
+ token_category_SetId,
+ token_category_GetId,
+ token_category_GetDataKey,
+ token_category_EnumTokens,
+ token_category_SetDefaultTokenId,
+ token_category_GetDefaultTokenId,
+};
+
+HRESULT token_category_create( IUnknown *outer, REFIID iid, void **obj )
+{
+ struct token_category *This = heap_alloc( sizeof(*This) );
+ HRESULT hr;
+
+ if (!This) return E_OUTOFMEMORY;
+ This->ISpObjectTokenCategory_iface.lpVtbl = &token_category_vtbl;
+ This->ref = 1;
+
+ hr = ISpObjectTokenCategory_QueryInterface( &This->ISpObjectTokenCategory_iface, iid, obj );
+
+ ISpObjectTokenCategory_Release( &This->ISpObjectTokenCategory_iface );
+ return hr;
+}
+
struct token_enum
{
ISpObjectTokenEnumBuilder ISpObjectTokenEnumBuilder_iface;
--
2.7.4
More information about the wine-patches
mailing list