[NETAPI32] Implement DsGetSiteNameA

Also add the NetpAllocAnsiStrFromWStr helper function.
This commit is contained in:
Eric Kohl 2019-08-24 13:15:41 +02:00
parent 0b129da05c
commit 3d5c682cd8
3 changed files with 74 additions and 4 deletions

View file

@ -135,6 +135,38 @@ NetUnregisterDomainNameChangeNotification(
} }
PSTR
WINAPI
NetpAllocAnsiStrFromWStr(
_In_ PWSTR InString)
{
UNICODE_STRING UnicodeString;
ANSI_STRING AnsiString;
ULONG Size;
NET_API_STATUS NetStatus;
NTSTATUS Status;
RtlInitUnicodeString(&UnicodeString, InString);
Size = RtlUnicodeStringToAnsiSize(&UnicodeString);
NetStatus = NetApiBufferAllocate(Size,
(PVOID*)&AnsiString.Buffer);
if (NetStatus != NERR_Success)
return NULL;
Status = RtlUnicodeStringToAnsiString(&AnsiString,
&UnicodeString,
FALSE);
if (!NT_SUCCESS(Status))
{
NetApiBufferFree(AnsiString.Buffer);
return NULL;
}
return AnsiString.Buffer;
}
PWSTR PWSTR
WINAPI WINAPI
NetpAllocWStrFromAnsiStr( NetpAllocWStrFromAnsiStr(

View file

@ -64,6 +64,11 @@ CopySidFromSidAndRid(
_In_ PSID SrcSid, _In_ PSID SrcSid,
_In_ ULONG RelativeId); _In_ ULONG RelativeId);
PSTR
WINAPI
NetpAllocAnsiStrFromWStr(
_In_ PWSTR InString);
PWSTR PWSTR
WINAPI WINAPI
NetpAllocWStrFromAnsiStr( NetpAllocWStrFromAnsiStr(

View file

@ -604,19 +604,52 @@ DsGetForestTrustInformationW(
DWORD DWORD
WINAPI WINAPI
DsGetSiteNameA( DsGetSiteNameA(
_In_ LPCSTR ComputerName, _In_opt_ LPCSTR ComputerName,
_Out_ LPSTR *SiteName) _Out_ LPSTR *SiteName)
{ {
FIXME("DsGetSiteNameA(%s, %p)\n", PWSTR pComputerNameW = NULL;
PWSTR pSiteNameW = NULL;
DWORD dwError = ERROR_SUCCESS;
TRACE("DsGetSiteNameA(%s, %p)\n",
debugstr_a(ComputerName), SiteName); debugstr_a(ComputerName), SiteName);
return ERROR_CALL_NOT_IMPLEMENTED;
if (ComputerName != NULL)
{
pComputerNameW = NetpAllocWStrFromAnsiStr((PSTR)ComputerName);
if (pComputerNameW == NULL)
{
dwError = ERROR_NOT_ENOUGH_MEMORY;
goto done;
}
}
dwError = DsGetSiteNameW(pComputerNameW,
&pSiteNameW);
if (dwError != ERROR_SUCCESS)
goto done;
*SiteName = NetpAllocAnsiStrFromWStr(pSiteNameW);
if (*SiteName == NULL)
{
dwError = ERROR_NOT_ENOUGH_MEMORY;
}
done:
if (pSiteNameW != NULL)
NetApiBufferFree(pSiteNameW);
if (pComputerNameW != NULL)
NetApiBufferFree(pComputerNameW);
return dwError;
} }
DWORD DWORD
WINAPI WINAPI
DsGetSiteNameW( DsGetSiteNameW(
_In_ LPCWSTR ComputerName, _In_opt_ LPCWSTR ComputerName,
_Out_ LPWSTR *SiteName) _Out_ LPWSTR *SiteName)
{ {
NET_API_STATUS status; NET_API_STATUS status;