Signed-off-by: Huw Davies huw@codeweavers.com --- dlls/nsi/nsi.c | 27 +++++++++++++++++++++++++++ dlls/nsi/nsi.spec | 2 +- dlls/nsi/tests/nsi.c | 20 ++++++++++++++++++++ include/wine/nsi.h | 19 +++++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-)
diff --git a/dlls/nsi/nsi.c b/dlls/nsi/nsi.c index 66054ffacd6..1ed0cfad916 100644 --- a/dlls/nsi/nsi.c +++ b/dlls/nsi/nsi.c @@ -43,8 +43,35 @@ DWORD WINAPI NsiEnumerateObjectsAllParameters( DWORD unk, DWORD unk2, const NPI_ void *dynamic_data, DWORD dynamic_size, void *static_data, DWORD static_size, DWORD *count ) { + struct nsi_enumerate_all_ex params; + DWORD err; + FIXME( "%d %d %p %d %p %d %p %d %p %d %p %d %p: stub\n", unk, unk2, module, table, key_data, key_size, rw_data, rw_size, dynamic_data, dynamic_size, static_data, static_size, count ); + + params.unknown[0] = 0; + params.unknown[1] = 0; + params.module = module; + params.table = table; + params.first_arg = unk; + params.second_arg = unk2; + params.key_data = key_data; + params.key_size = key_size; + params.rw_data = rw_data; + params.rw_size = rw_size; + params.dynamic_data = dynamic_data; + params.dynamic_size = dynamic_size; + params.static_data = static_data; + params.static_size = static_size; + params.count = *count; + + err = NsiEnumerateObjectsAllParametersEx( ¶ms ); + *count = params.count; + return err; +} + +DWORD WINAPI NsiEnumerateObjectsAllParametersEx( struct nsi_enumerate_all_ex *params ) +{ return ERROR_CALL_NOT_IMPLEMENTED; }
diff --git a/dlls/nsi/nsi.spec b/dlls/nsi/nsi.spec index d4a29c38fe6..912a5e8d052 100644 --- a/dlls/nsi/nsi.spec +++ b/dlls/nsi/nsi.spec @@ -4,7 +4,7 @@ @ stub NsiDeregisterChangeNotification @ stub NsiDeregisterChangeNotificationEx @ stdcall NsiEnumerateObjectsAllParameters(long long ptr long ptr long ptr long ptr long ptr long ptr) -@ stub NsiEnumerateObjectsAllParametersEx +@ stdcall NsiEnumerateObjectsAllParametersEx(ptr) @ stub NsiEnumerateObjectsAllPersistentParametersWithMask @ stub NsiFreePersistentDataWithMaskTable @ stdcall NsiFreeTable(ptr ptr ptr ptr) diff --git a/dlls/nsi/tests/nsi.c b/dlls/nsi/tests/nsi.c index b1befd548cd..5e2ea71646c 100644 --- a/dlls/nsi/tests/nsi.c +++ b/dlls/nsi/tests/nsi.c @@ -40,6 +40,7 @@ static void test_nsi_api( void ) struct nsi_ndis_ifinfo_rw *rw_tbl, *rw, get_rw, *enum_rw_tbl, *enum_rw; struct nsi_ndis_ifinfo_dynamic *dyn_tbl, *dyn, get_dyn, *enum_dyn_tbl, *enum_dyn; struct nsi_ndis_ifinfo_static *stat_tbl, *stat, get_stat, *enum_stat_tbl, *enum_stat; + struct nsi_enumerate_all_ex enum_params; DWORD err, count, i, rw_size, enum_count; NET_LUID *luid_tbl, *enum_luid_tbl;
@@ -159,6 +160,25 @@ todo_wine ok( enum_luid_tbl[i].Value == luid_tbl[i].Value, "%d: mismatch\n", i ); }
+ memset( &enum_params, 0, sizeof(enum_params) ); + enum_params.first_arg = 1; + enum_params.second_arg = 1; + enum_params.module = &NPI_MS_NDIS_MODULEID; + enum_params.table = NSI_NDIS_IFINFO_TABLE; + enum_params.key_data = enum_luid_tbl; + enum_params.key_size = sizeof(*enum_luid_tbl); + enum_params.rw_data = enum_rw_tbl; + enum_params.rw_size = rw_size; + enum_params.dynamic_data = enum_dyn_tbl; + enum_params.dynamic_size = sizeof(*enum_dyn_tbl); + enum_params.static_data = enum_stat_tbl; + enum_params.static_size = sizeof(*enum_stat_tbl); + enum_params.count = count; + + err = NsiEnumerateObjectsAllParametersEx( &enum_params ); + ok( !err, "got %d\n", err ); + ok( enum_params.count == count, "mismatch\n" ); + free( enum_luid_tbl ); free( enum_rw_tbl ); free( enum_dyn_tbl ); diff --git a/include/wine/nsi.h b/include/wine/nsi.h index 648adac9931..999b8a57810 100644 --- a/include/wine/nsi.h +++ b/include/wine/nsi.h @@ -98,6 +98,24 @@ struct nsi_ndis_ifinfo_static #define NSI_PARAM_TYPE_DYNAMIC 1 #define NSI_PARAM_TYPE_STATIC 2
+struct nsi_enumerate_all_ex +{ + void *unknown[2]; + const NPI_MODULEID *module; + DWORD_PTR table; + DWORD first_arg; + DWORD second_arg; + void *key_data; + DWORD key_size; + void *rw_data; + DWORD rw_size; + void *dynamic_data; + DWORD dynamic_size; + void *static_data; + DWORD static_size; + DWORD_PTR count; +}; + DWORD WINAPI NsiAllocateAndGetTable( DWORD unk, const NPI_MODULEID *module, DWORD table, void **key_data, DWORD key_size, void **rw_data, DWORD rw_size, void **dynamic_data, DWORD dynamic_size, void **static_data, DWORD static_size, DWORD *count, DWORD unk2 ); @@ -105,6 +123,7 @@ DWORD WINAPI NsiEnumerateObjectsAllParameters( DWORD unk, DWORD unk2, const NPI_ void *key_data, DWORD key_size, void *rw_data, DWORD rw_size, void *dynamic_data, DWORD dynamic_size, void *static_data, DWORD static_size, DWORD *count ); +DWORD WINAPI NsiEnumerateObjectsAllParametersEx( struct nsi_enumerate_all_ex *params ); void WINAPI NsiFreeTable( void *key_data, void *rw_data, void *dynamic_data, void *static_data ); DWORD WINAPI NsiGetAllParameters( DWORD unk, const NPI_MODULEID *module, DWORD table, const void *key, DWORD key_size, void *rw_data, DWORD rw_size, void *dynamic_data, DWORD dynamic_size,