Skip to content

Commit 3807be2

Browse files
alesliehughesivyl
authored andcommitted
sapi: Return dump object in ISpObjectTokenEnumBuilder Next
CW-Bug-Id: #20616
1 parent 9120b41 commit 3807be2

1 file changed

Lines changed: 29 additions & 1 deletion

File tree

dlls/sapi/token.c

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ struct token_enum
5757
WCHAR *req, *opt;
5858
ULONG count;
5959
HKEY key;
60+
DWORD index;
6061
};
6162

6263
static struct token_enum *impl_from_ISpObjectTokenEnumBuilder( ISpObjectTokenEnumBuilder *iface )
@@ -705,6 +706,12 @@ static HRESULT WINAPI token_enum_Next( ISpObjectTokenEnumBuilder *iface,
705706
ULONG *fetched )
706707
{
707708
struct token_enum *This = impl_from_ISpObjectTokenEnumBuilder( iface );
709+
struct object_token *object;
710+
HRESULT hr;
711+
DWORD retCode;
712+
WCHAR subKeyName[128];
713+
DWORD size_sub = sizeof(subKeyName);
714+
HKEY sub_key;
708715

709716
TRACE( "(%p)->(%lu %p %p)\n", This, num, tokens, fetched );
710717

@@ -713,7 +720,27 @@ static HRESULT WINAPI token_enum_Next( ISpObjectTokenEnumBuilder *iface,
713720
FIXME( "semi-stub: Returning an empty enumerator\n" );
714721

715722
if (fetched) *fetched = 0;
716-
return S_FALSE;
723+
*tokens = NULL;
724+
725+
retCode = RegEnumKeyExW(This->key, This->index, subKeyName, &size_sub, NULL, NULL, NULL, NULL);
726+
if (retCode != ERROR_SUCCESS)
727+
return S_FALSE;
728+
729+
This->index++;
730+
731+
if( RegOpenKeyExW( This->key, subKeyName, 0, KEY_READ, &sub_key ) != ERROR_SUCCESS )
732+
return E_FAIL;
733+
734+
hr = token_create( NULL, &IID_ISpObjectToken, (void**)tokens );
735+
if (FAILED(hr))
736+
return hr;
737+
738+
object = impl_from_ISpObjectToken( *tokens );
739+
object->token_key = sub_key;
740+
object->token_id = heap_strdupW( subKeyName );
741+
742+
if (fetched) *fetched = 1;
743+
return hr;
717744
}
718745

719746
static HRESULT WINAPI token_enum_Skip( ISpObjectTokenEnumBuilder *iface,
@@ -882,6 +909,7 @@ HRESULT token_enum_create( IUnknown *outer, REFIID iid, void **obj )
882909
This->init = FALSE;
883910
This->count = 0;
884911
This->key = NULL;
912+
This->index = 0;
885913

886914
hr = ISpObjectTokenEnumBuilder_QueryInterface( &This->ISpObjectTokenEnumBuilder_iface, iid, obj );
887915

0 commit comments

Comments
 (0)