From 91bf59e6d9115da127ef94b6002a38b87b2af799 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 20 May 2012 20:33:16 +0000 Subject: [PATCH] [samlib] - Add DDK header ntsam.h. - Add some client side stubs of the SAM RPC interface. svn path=/trunk/; revision=56646 --- reactos/dll/win32/samlib/CMakeLists.txt | 15 ++-- reactos/dll/win32/samlib/precomp.h | 3 + reactos/dll/win32/samlib/samlib.c | 91 +++++++++++++++++++++++++ reactos/dll/win32/samlib/samlib.spec | 6 +- reactos/include/ddk/ntsam.h | 31 +++++++++ 5 files changed, 139 insertions(+), 7 deletions(-) create mode 100644 reactos/include/ddk/ntsam.h diff --git a/reactos/dll/win32/samlib/CMakeLists.txt b/reactos/dll/win32/samlib/CMakeLists.txt index fb947aca696..2ac70d5f12e 100644 --- a/reactos/dll/win32/samlib/CMakeLists.txt +++ b/reactos/dll/win32/samlib/CMakeLists.txt @@ -1,20 +1,27 @@ -include_directories(${REACTOS_SOURCE_DIR}/include/reactos/wine) +include_directories( + ${REACTOS_SOURCE_DIR}/include/reactos/idl + ${REACTOS_SOURCE_DIR}/include/reactos/wine) + add_definitions(-D__WINESRC__) set_rc_compiler() spec2def(samlib.dll samlib.spec ADD_IMPORTLIB) +add_rpc_files(client + ${REACTOS_SOURCE_DIR}/include/reactos/idl/sam.idl) + list(APPEND SOURCE dllmain.c samlib.c samlib.rc ${CMAKE_CURRENT_BINARY_DIR}/samlib_stubs.c - ${CMAKE_CURRENT_BINARY_DIR}/samlib.def) + ${CMAKE_CURRENT_BINARY_DIR}/samlib.def + ${CMAKE_CURRENT_BINARY_DIR}/sam_c.c) add_library(samlib SHARED ${SOURCE}) -set_module_type(samlib win32dll) -add_importlibs(samlib advapi32 msvcrt kernel32 ntdll) +set_module_type(samlib win32dll UNICODE) +add_importlibs(samlib rpcrt4 advapi32 msvcrt kernel32 ntdll) add_pch(samlib precomp.h) add_cd_file(TARGET samlib DESTINATION reactos/system32 FOR all) diff --git a/reactos/dll/win32/samlib/precomp.h b/reactos/dll/win32/samlib/precomp.h index 15bfac7d1c7..165d03474da 100644 --- a/reactos/dll/win32/samlib/precomp.h +++ b/reactos/dll/win32/samlib/precomp.h @@ -6,5 +6,8 @@ #include #define NTOS_MODE_USER #include +#include + +#include "sam_c.h" #include "debug.h" diff --git a/reactos/dll/win32/samlib/samlib.c b/reactos/dll/win32/samlib/samlib.c index e6d2cddd012..43b05a60c17 100644 --- a/reactos/dll/win32/samlib/samlib.c +++ b/reactos/dll/win32/samlib/samlib.c @@ -578,4 +578,95 @@ SamGetUserSid (PWSTR UserName, return TRUE; } +void __RPC_FAR * __RPC_USER midl_user_allocate(SIZE_T len) +{ + return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); +} + + +void __RPC_USER midl_user_free(void __RPC_FAR * ptr) +{ + HeapFree(GetProcessHeap(), 0, ptr); +} + + +handle_t __RPC_USER +PSAMPR_SERVER_NAME_bind(PSAMPR_SERVER_NAME pszSystemName) +{ + handle_t hBinding = NULL; + LPWSTR pszStringBinding; + RPC_STATUS status; + +// TRACE("PSAMPR_SERVER_NAME_bind() called\n"); + + status = RpcStringBindingComposeW(NULL, + L"ncacn_np", + pszSystemName, + L"\\pipe\\samr", + NULL, + &pszStringBinding); + if (status) + { +// TRACE("RpcStringBindingCompose returned 0x%x\n", status); + return NULL; + } + + /* Set the binding handle that will be used to bind to the server. */ + status = RpcBindingFromStringBindingW(pszStringBinding, + &hBinding); + if (status) + { +// TRACE("RpcBindingFromStringBinding returned 0x%x\n", status); + } + + status = RpcStringFreeW(&pszStringBinding); + if (status) + { +// TRACE("RpcStringFree returned 0x%x\n", status); + } + + return hBinding; +} + + +void __RPC_USER +PSAMPR_SERVER_NAME_unbind(PSAMPR_SERVER_NAME pszSystemName, + handle_t hBinding) +{ + RPC_STATUS status; + +// TRACE("PSAMPR_SERVER_NAME_unbind() called\n"); + + status = RpcBindingFree(&hBinding); + if (status) + { +// TRACE("RpcBindingFree returned 0x%x\n", status); + } +} + + +NTSTATUS +NTAPI +SamCloseHandle(IN SAM_HANDLE SamHandle) +{ + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +SamConnect(IN OUT PUNICODE_STRING ServerName, + OUT PSAM_HANDLE ServerHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes) +{ + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +SamShutdownSamServer(IN SAM_HANDLE ServerHandle) +{ + return STATUS_NOT_IMPLEMENTED; +} + /* EOF */ diff --git a/reactos/dll/win32/samlib/samlib.spec b/reactos/dll/win32/samlib/samlib.spec index 9dc2eec5339..377bfdc75ea 100644 --- a/reactos/dll/win32/samlib/samlib.spec +++ b/reactos/dll/win32/samlib/samlib.spec @@ -4,8 +4,8 @@ @ stub SamChangePasswordUser2 @ stub SamChangePasswordUser3 @ stub SamChangePasswordUser -@ stub SamCloseHandle -@ stub SamConnect +@ stdcall SamCloseHandle(ptr) +@ stdcall SamConnect(ptr ptr long ptr) @ stub SamConnectWithCreds @ stub SamCreateAliasInDomain @ stub SamCreateGroupInDomain @@ -49,7 +49,7 @@ @ stub SamSetInformationUser @ stub SamSetMemberAttributesOfGroup @ stub SamSetSecurityObject -@ stub SamShutdownSamServer +@ stdcall SamShutdownSamServer(ptr) @ stub SamTestPrivateFunctionsDomain @ stub SamTestPrivateFunctionsUser @ stub SamiChangeKeys diff --git a/reactos/include/ddk/ntsam.h b/reactos/include/ddk/ntsam.h new file mode 100644 index 00000000000..41c3a147b6b --- /dev/null +++ b/reactos/include/ddk/ntsam.h @@ -0,0 +1,31 @@ + +#ifndef _NTSAM_ +#define _NTSAM_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef PVOID SAM_HANDLE, *PSAM_HANDLE; + +NTSTATUS +NTAPI +SamCloseHandle(IN SAM_HANDLE SamHandle); + +NTSTATUS +NTAPI +SamConnect(IN OUT PUNICODE_STRING ServerName, + OUT PSAM_HANDLE ServerHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes); + +NTSTATUS +NTAPI +SamShutdownSamServer(IN SAM_HANDLE ServerHandle); + + +#ifdef __cplusplus +} +#endif + +#endif /* _NTSAM_ */