3 * LICENSE: GPL-2.0 (https://spdx.org/licenses/GPL-2.0)
4 * PURPOSE: Miscellaneous functions
5 * COPYRIGHT: Copyright 2017 Eric Kohl (eric.kohl@reactos.org)
8 /* INCLUDES ******************************************************************/
17 WINE_DEFAULT_DEBUG_CHANNEL(netapi32
);
19 /* FUNCTIONS *****************************************************************/
23 NetRegisterDomainNameChangeNotification(
24 _Out_ PHANDLE NotificationEventHandle
)
29 TRACE("NetRegisterDomainNameChangeNotification(%p)\n",
30 NotificationEventHandle
);
32 if (NotificationEventHandle
== NULL
)
33 return ERROR_INVALID_PARAMETER
;
35 EventHandle
= CreateEventW(NULL
, FALSE
, FALSE
, NULL
);
36 if (EventHandle
== NULL
)
37 return GetLastError();
39 Status
= LsaRegisterPolicyChangeNotification(PolicyNotifyDnsDomainInformation
,
40 NotificationEventHandle
);
41 if (!NT_SUCCESS(Status
))
43 CloseHandle(EventHandle
);
44 return NetpNtStatusToApiStatus(Status
);
47 *NotificationEventHandle
= EventHandle
;
62 NET_API_STATUS status
= ERROR_NOT_SUPPORTED
;
64 TRACE("NetStatisticsGet(%s %s %lu %lu %p)\n",
65 debugstr_w(server
), debugstr_w(service
), level
, options
, bufptr
);
69 if (_wcsicmp(service
, L
"LanmanWorkstation") == 0)
72 return ERROR_INVALID_LEVEL
;
75 return ERROR_INVALID_PARAMETER
;
79 status
= NetrWorkstationStatisticsGet(server
,
83 (LPSTAT_WORKSTATION_0
*)bufptr
);
85 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
87 status
= I_RpcMapWin32Status(RpcExceptionCode());
91 else if (_wcsicmp(service
, L
"LanmanServer") == 0)
94 return ERROR_INVALID_LEVEL
;
97 return ERROR_INVALID_PARAMETER
;
101 status
= NetrServerStatisticsGet(server
,
105 (LPSTAT_SERVER_0
*)bufptr
);
107 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
109 status
= I_RpcMapWin32Status(RpcExceptionCode());
120 NetUnregisterDomainNameChangeNotification(
121 _In_ HANDLE NotificationEventHandle
)
125 TRACE("NetUnregisterDomainNameChangeNotification(%p)\n",
126 NotificationEventHandle
);
128 if (NotificationEventHandle
== NULL
)
129 return ERROR_INVALID_PARAMETER
;
131 Status
= LsaUnregisterPolicyChangeNotification(PolicyNotifyDnsDomainInformation
,
132 NotificationEventHandle
);
134 return NetpNtStatusToApiStatus(Status
);
140 NetpAllocWStrFromAnsiStr(
143 ANSI_STRING AnsiString
;
144 UNICODE_STRING UnicodeString
;
146 NET_API_STATUS NetStatus
;
149 RtlInitAnsiString(&AnsiString
, InString
);
151 Size
= RtlAnsiStringToUnicodeSize(&AnsiString
);
152 NetStatus
= NetApiBufferAllocate(Size
,
153 (PVOID
*)&UnicodeString
.Buffer
);
154 if (NetStatus
!= NERR_Success
)
157 Status
= RtlAnsiStringToUnicodeString(&UnicodeString
,
160 if (!NT_SUCCESS(Status
))
162 NetApiBufferFree(UnicodeString
.Buffer
);
166 return UnicodeString
.Buffer
;
172 NetpAllocWStrFromStr(
175 OEM_STRING OemString
;
176 UNICODE_STRING UnicodeString
;
178 NET_API_STATUS NetStatus
;
181 RtlInitAnsiString((PANSI_STRING
)&OemString
, InString
);
183 Size
= RtlOemStringToUnicodeSize(&OemString
);
184 NetStatus
= NetApiBufferAllocate(Size
,
185 (PVOID
*)&UnicodeString
.Buffer
);
186 if (NetStatus
!= NERR_Success
)
189 Status
= RtlOemStringToUnicodeString(&UnicodeString
,
192 if (!NT_SUCCESS(Status
))
194 NetApiBufferFree(UnicodeString
.Buffer
);
198 return UnicodeString
.Buffer
;
204 NetpAllocWStrFromWStr(
209 NET_API_STATUS Status
;
211 Size
= (wcslen(InString
) + 1) * sizeof(WCHAR
);
212 Status
= NetApiBufferAllocate(Size
,
214 if (Status
!= NERR_Success
)
217 wcscpy(OutString
, InString
);
225 NetpNtStatusToApiStatus(
226 _In_ NTSTATUS Status
)
228 NET_API_STATUS ApiStatus
;
233 ApiStatus
= NERR_Success
;
236 case STATUS_INVALID_ACCOUNT_NAME
:
237 ApiStatus
= NERR_BadUsername
;
240 case STATUS_PASSWORD_RESTRICTION
:
241 ApiStatus
= NERR_PasswordTooShort
;
245 ApiStatus
= RtlNtStatusToDosError(Status
);