Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/kernel32/kernel32.spec | 2 +- dlls/kernel32/security.c | 17 +++++++++++++++++ include/namespaceapi.h | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index c108272f1b1..df340fa4d21 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 ec8a348e1a2..a75d5c2b67a 100644 --- a/dlls/kernel32/security.c +++ b/dlls/kernel32/security.c @@ -40,3 +40,20 @@ HANDLE WINAPI CreateBoundaryDescriptorA( LPCSTR name, ULONG flags ) } return CreateBoundaryDescriptorW( buffer, flags ); } + +/****************************************************************************** + * CreatePrivateNamespaceA (KERNEL32.@) + */ +HANDLE WINAPI CreatePrivateNamespaceA( LPSECURITY_ATTRIBUTES attr, LPVOID descr, LPCSTR prefix ) +{ + WCHAR buffer[MAX_PATH]; + + if (!prefix) return CreatePrivateNamespaceW( attr, descr, NULL ); + + if (!MultiByteToWideChar( CP_ACP, 0, prefix, -1, buffer, MAX_PATH )) + { + SetLastError( ERROR_FILENAME_EXCED_RANGE ); + return 0; + } + return CreatePrivateNamespaceW( attr, descr, buffer ); +} 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);