Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/kernel32/kernel32.spec | 2 +- dlls/kernel32/security.c | 24 ++++++++++++++++++++++++ include/namespaceapi.h | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 5fcd06fe802..0598a87933f 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -308,7 +308,7 @@ @ stdcall -import CreateNamedPipeW(wstr long long long long long long ptr) # @ stub CreateNlsSecurityDescriptor @ stdcall -import CreatePipe(ptr ptr ptr long) -# @ stub CreatePrivateNamespaceA +@ stdcall CreatePrivateNamespaceA(ptr ptr str) @ stdcall -import CreatePrivateNamespaceW(ptr ptr wstr) @ stdcall -import CreateProcessA(str str ptr ptr long long ptr str ptr ptr) @ stdcall -import CreateProcessAsUserA(long str str ptr ptr long long ptr str ptr ptr) diff --git a/dlls/kernel32/security.c b/dlls/kernel32/security.c index dc8c8e58d7d..ad74cd61585 100644 --- a/dlls/kernel32/security.c +++ b/dlls/kernel32/security.c @@ -51,3 +51,27 @@ HANDLE WINAPI CreateBoundaryDescriptorA( LPCSTR name, ULONG flags ) HeapFree( GetProcessHeap(), 0, str ); return ret; } + +/****************************************************************************** + * CreatePrivateNamespaceA (KERNEL32.@) + */ +HANDLE WINAPI CreatePrivateNamespaceA( LPSECURITY_ATTRIBUTES attr, LPVOID descr, LPCSTR prefix ) +{ + DWORD len; + HANDLE ret; + LPWSTR str = NULL; + + TRACE( "%p %p %s\n", attr, descr, debugstr_a(prefix) ); + + if(prefix) + { + len = MultiByteToWideChar( CP_ACP, 0, prefix, -1, NULL, 0 ); + str = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, prefix, -1, str, len ); + } + + ret = CreatePrivateNamespaceW( attr, descr, str ); + + HeapFree( GetProcessHeap(), 0, str ); + return ret; +} diff --git a/include/namespaceapi.h b/include/namespaceapi.h index f219a2a7488..6b3198b67c6 100644 --- a/include/namespaceapi.h +++ b/include/namespaceapi.h @@ -30,7 +30,9 @@ WINBASEAPI BOOLEAN WINAPI ClosePrivateNamespace(HANDLE,ULONG); WINBASEAPI HANDLE WINAPI CreateBoundaryDescriptorA(LPCSTR,ULONG); WINBASEAPI HANDLE WINAPI CreateBoundaryDescriptorW(LPCWSTR,ULONG); #define CreateBoundaryDescriptor WINELIB_NAME_AW(CreateBoundaryDescriptor) +WINBASEAPI HANDLE WINAPI CreatePrivateNamespaceA(LPSECURITY_ATTRIBUTES,LPVOID,LPCSTR); WINBASEAPI HANDLE WINAPI CreatePrivateNamespaceW(LPSECURITY_ATTRIBUTES,LPVOID,LPCWSTR); +#define CreatePrivateNamespace WINELIB_NAME_AW(CreatePrivateNamespace) WINBASEAPI void WINAPI DeleteBoundaryDescriptor(HANDLE); WINBASEAPI HANDLE WINAPI OpenPrivateNamespaceW(LPVOID,LPCWSTR);