[PATCH 5/6] nsi: Implement NsiGetParameterEx().
Huw Davies
huw at codeweavers.com
Thu Jul 1 03:27:07 CDT 2021
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
dlls/nsi/nsi.c | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/dlls/nsi/nsi.c b/dlls/nsi/nsi.c
index d94222aecfc..08aec49257a 100644
--- a/dlls/nsi/nsi.c
+++ b/dlls/nsi/nsi.c
@@ -257,7 +257,7 @@ DWORD WINAPI NsiGetParameter( DWORD unk, const NPI_MODULEID *module, DWORD table
{
struct nsi_get_parameter_ex params;
- FIXME( "%d %p %d %p %d %d %p %d %d: stub\n", unk, module, table, key, key_size,
+ TRACE( "%d %p %d %p %d %d %p %d %d\n", unk, module, table, key, key_size,
param_type, data, data_size, data_offset );
params.unknown[0] = 0;
@@ -277,5 +277,32 @@ DWORD WINAPI NsiGetParameter( DWORD unk, const NPI_MODULEID *module, DWORD table
DWORD WINAPI NsiGetParameterEx( struct nsi_get_parameter_ex *params )
{
- return ERROR_CALL_NOT_IMPLEMENTED;
+ HANDLE device = get_nsi_device();
+ struct nsiproxy_get_parameter *in;
+ ULONG in_size = FIELD_OFFSET( struct nsiproxy_get_parameter, key[params->key_size] ), received;
+ DWORD err = ERROR_SUCCESS;
+
+ if (device == INVALID_HANDLE_VALUE) return GetLastError();
+
+ in = heap_alloc( in_size );
+ if (!in)
+ {
+ err = ERROR_OUTOFMEMORY;
+ goto err;
+ }
+ in->module = *params->module;
+ in->first_arg = params->first_arg;
+ in->table = params->table;
+ in->key_size = params->key_size;
+ in->param_type = params->param_type;
+ in->data_offset = params->data_offset;
+ memcpy( in->key, params->key, params->key_size );
+
+ if (!DeviceIoControl( device, IOCTL_NSIPROXY_WINE_GET_PARAMETER, in, in_size, params->data, params->data_size, &received, NULL ))
+ err = GetLastError();
+
+err:
+ heap_free( in );
+ CloseHandle( device );
+ return err;
}
--
2.23.0
More information about the wine-devel
mailing list