}
+static
+VOID
+FreeUserInfo(PUSER_ALL_INFORMATION UserInfo)
+{
+ if (UserInfo->UserName.Buffer != NULL)
+ SamFreeMemory(UserInfo->UserName.Buffer);
+
+ if (UserInfo->FullName.Buffer != NULL)
+ SamFreeMemory(UserInfo->FullName.Buffer);
+
+ if (UserInfo->HomeDirectory.Buffer != NULL)
+ SamFreeMemory(UserInfo->HomeDirectory.Buffer);
+
+ if (UserInfo->HomeDirectoryDrive.Buffer != NULL)
+ SamFreeMemory(UserInfo->HomeDirectoryDrive.Buffer);
+
+ if (UserInfo->ScriptPath.Buffer != NULL)
+ SamFreeMemory(UserInfo->ScriptPath.Buffer);
+
+ if (UserInfo->ProfilePath.Buffer != NULL)
+ SamFreeMemory(UserInfo->ProfilePath.Buffer);
+
+ if (UserInfo->AdminComment.Buffer != NULL)
+ SamFreeMemory(UserInfo->AdminComment.Buffer);
+
+ if (UserInfo->WorkStations.Buffer != NULL)
+ SamFreeMemory(UserInfo->WorkStations.Buffer);
+
+ if (UserInfo->UserComment.Buffer != NULL)
+ SamFreeMemory(UserInfo->UserComment.Buffer);
+
+ if (UserInfo->Parameters.Buffer != NULL)
+ SamFreeMemory(UserInfo->Parameters.Buffer);
+
+ if (UserInfo->PrivateData.Buffer != NULL)
+ SamFreeMemory(UserInfo->PrivateData.Buffer);
+
+ if (UserInfo->LogonHours.LogonHours != NULL)
+ SamFreeMemory(UserInfo->LogonHours.LogonHours);
+
+ SamFreeMemory(UserInfo);
+}
+
+
static
NET_API_STATUS
-BuildUserInfoBuffer(PUSER_ALL_INFORMATION UserInfo,
+BuildUserInfoBuffer(SAM_HANDLE UserHandle,
DWORD level,
ULONG RelativeId,
LPVOID *Buffer)
{
UNICODE_STRING LogonServer = RTL_CONSTANT_STRING(L"\\\\*");
+ PUSER_ALL_INFORMATION UserInfo = NULL;
LPVOID LocalBuffer = NULL;
PUSER_INFO_0 UserInfo0;
PUSER_INFO_1 UserInfo1;
PUSER_INFO_23 UserInfo23;
LPWSTR Ptr;
ULONG Size = 0;
+ NTSTATUS Status;
NET_API_STATUS ApiStatus = NERR_Success;
*Buffer = NULL;
+ Status = SamQueryInformationUser(UserHandle,
+ UserAllInformation,
+ (PVOID *)&UserInfo);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("SamQueryInformationUser failed (Status %08lx)\n", Status);
+ ApiStatus = NetpNtStatusToApiStatus(Status);
+ goto done;
+ }
+
switch (level)
{
case 0:
}
done:
+ if (UserInfo != NULL)
+ FreeUserInfo(UserInfo);
+
if (ApiStatus == NERR_Success)
{
*Buffer = LocalBuffer;
}
-static
-VOID
-FreeUserInfo(PUSER_ALL_INFORMATION UserInfo)
-{
- if (UserInfo->UserName.Buffer != NULL)
- SamFreeMemory(UserInfo->UserName.Buffer);
-
- if (UserInfo->FullName.Buffer != NULL)
- SamFreeMemory(UserInfo->FullName.Buffer);
-
- if (UserInfo->HomeDirectory.Buffer != NULL)
- SamFreeMemory(UserInfo->HomeDirectory.Buffer);
-
- if (UserInfo->HomeDirectoryDrive.Buffer != NULL)
- SamFreeMemory(UserInfo->HomeDirectoryDrive.Buffer);
-
- if (UserInfo->ScriptPath.Buffer != NULL)
- SamFreeMemory(UserInfo->ScriptPath.Buffer);
-
- if (UserInfo->ProfilePath.Buffer != NULL)
- SamFreeMemory(UserInfo->ProfilePath.Buffer);
-
- if (UserInfo->AdminComment.Buffer != NULL)
- SamFreeMemory(UserInfo->AdminComment.Buffer);
-
- if (UserInfo->WorkStations.Buffer != NULL)
- SamFreeMemory(UserInfo->WorkStations.Buffer);
-
- if (UserInfo->UserComment.Buffer != NULL)
- SamFreeMemory(UserInfo->UserComment.Buffer);
-
- if (UserInfo->Parameters.Buffer != NULL)
- SamFreeMemory(UserInfo->Parameters.Buffer);
-
- if (UserInfo->PrivateData.Buffer != NULL)
- SamFreeMemory(UserInfo->PrivateData.Buffer);
-
- if (UserInfo->LogonHours.LogonHours != NULL)
- SamFreeMemory(UserInfo->LogonHours.LogonHours);
-
- SamFreeMemory(UserInfo);
-}
-
-
static
NET_API_STATUS
SetUserInfo(SAM_HANDLE UserHandle,
LPVOID Buffer = NULL;
ULONG i;
SAM_HANDLE UserHandle = NULL;
- PUSER_ALL_INFORMATION UserInfo = NULL;
-
NET_API_STATUS ApiStatus = NERR_Success;
NTSTATUS Status = STATUS_SUCCESS;
goto done;
}
- Status = SamQueryInformationUser(UserHandle,
- UserAllInformation,
- (PVOID *)&UserInfo);
- if (!NT_SUCCESS(Status))
- {
- ERR("SamQueryInformationUser failed (Status %08lx)\n", Status);
- ApiStatus = NetpNtStatusToApiStatus(Status);
- goto done;
- }
-
- SamCloseHandle(UserHandle);
- UserHandle = NULL;
-
- ApiStatus = BuildUserInfoBuffer(UserInfo,
+ ApiStatus = BuildUserInfoBuffer(UserHandle,
level,
CurrentUser->RelativeId,
&Buffer);
goto done;
}
- if (UserInfo != NULL)
- {
- FreeUserInfo(UserInfo);
- UserInfo = NULL;
- }
+ SamCloseHandle(UserHandle);
+ UserHandle = NULL;
EnumContext->Index++;
if (UserHandle != NULL)
SamCloseHandle(UserHandle);
- if (UserInfo != NULL)
- FreeUserInfo(UserInfo);
-
if (resume_handle != NULL)
*resume_handle = (DWORD_PTR)EnumContext;
SAM_HANDLE UserHandle = NULL;
PULONG RelativeIds = NULL;
PSID_NAME_USE Use = NULL;
- PUSER_ALL_INFORMATION UserInfo = NULL;
LPVOID Buffer = NULL;
NET_API_STATUS ApiStatus = NERR_Success;
NTSTATUS Status = STATUS_SUCCESS;
goto done;
}
- Status = SamQueryInformationUser(UserHandle,
- UserAllInformation,
- (PVOID *)&UserInfo);
- if (!NT_SUCCESS(Status))
- {
- ERR("SamQueryInformationUser failed (Status %08lx)\n", Status);
- ApiStatus = NetpNtStatusToApiStatus(Status);
- goto done;
- }
-
- ApiStatus = BuildUserInfoBuffer(UserInfo,
+ ApiStatus = BuildUserInfoBuffer(UserHandle,
level,
RelativeIds[0],
&Buffer);
}
done:
- if (UserInfo != NULL)
- FreeUserInfo(UserInfo);
-
if (UserHandle != NULL)
SamCloseHandle(UserHandle);