21 TRACE(
"(%p %lu %lx %p)\n",
44 ULONG GroupsCount = 0;
49 TRACE(
"(%p %lu %lx)\n",
61 if (GroupsBuffer ==
NULL)
80 for (
i = 0;
i < GroupsCount;
i++)
82 if (GroupsBuffer[
i].RelativeId == GroupId)
89 GroupsBuffer[GroupsCount].
RelativeId = GroupId;
100 if (GroupsBuffer !=
NULL)
112 ULONG GroupsCount = 0;
118 UserObject, GroupId);
130 if (GroupsBuffer ==
NULL)
147 for (
i = 0;
i < GroupsCount;
i++)
149 if (GroupsBuffer[
i].RelativeId == GroupId)
154 if (GroupsCount -
i - 1 > 0)
157 &GroupsBuffer[
i + 1],
175 if (GroupsBuffer !=
NULL)
213 if (GroupsBuffer ==
NULL)
229 if (GroupsBuffer[
i].RelativeId == GroupId)
237 if (GroupsBuffer !=
NULL)
240 if (UserObject !=
NULL)
278 if (GroupsBuffer ==
NULL)
294 if (GroupsBuffer[
i].RelativeId == GroupId)
308 if (GroupsBuffer !=
NULL)
311 if (UserObject !=
NULL)
337 if (GroupsBuffer ==
NULL)
383 if (GroupsBuffer !=
NULL)
397 WCHAR UserIdBuffer[64];
400 HANDLE UserSidKeyHandle =
NULL, UserIdKeyHandle, UserIdMembersKeyHandle;
403 TRACE(
"SampRemoveUserFromDomainAliases(%p %p)\n", DomainKeyHandle, UserObject);
411 ERR(
"Failed to open the Aliases key (Status %08lX)\n",
Status);
418 &AliasesMembersKeyHandle);
421 ERR(
"Failed to open the Members key (Status %08lX)\n",
Status);
431 TRACE(
"Opend the key for the users SID (%S)!\n", UserSidString);
450 TRACE(
"User ID: %S\n", UserIdBuffer);
461 &UserIdMembersKeyHandle);
482 TRACE(
"No key for the user SID (%S) here!\n", UserSidString);
505 WCHAR DomainKeyName[64];
507 ULONG DomainEnumIndex;
510 TRACE(
"SampRemoveUserFromAllAliases(%p)\n", UserObject);
515 ERR(
"Invalid domain object!\n");
524 ERR(
"SampCreateAccountSid() failed (Status 0x%08lx)\n",
Status);
529 TRACE(
"User SID: %S\n", UserSidString);
532 L"\\Registry\\Machine\\SAM\\SAM\\Domains",
537 ERR(
"SampRegOpenKey() failed (Status 0x%08lx)\n",
Status);
554 TRACE(
"DomainEnumIndex: %lu\n", DomainEnumIndex);
555 TRACE(
"Domain key name: %S\n", DomainKeyName);
576 if (DomainsKeyHandle !=
NULL)
579 if (UserSidString !=
NULL)
598 ULONG NtHistoryLength = 0;
599 ULONG LmHistoryLength = 0;
600 ULONG CurrentHistoryLength;
601 ULONG MaxHistoryLength = 3;
608 ((NtPasswordPresent !=
FALSE) &&
609 (NtPassword !=
NULL) &&
613 ((LmPasswordPresent !=
FALSE) &&
614 (LmPassword !=
NULL) &&
628 if (CurrentHistoryLength < MaxHistoryLength)
639 if (NtHistory ==
NULL)
663 if (NtPasswordPresent)
697 if (CurrentHistoryLength < MaxHistoryLength)
708 if (LmHistory ==
NULL)
732 if (LmPasswordPresent)
799 if (NtHistory !=
NULL)
802 if (LmHistory !=
NULL)
825 TRACE(
"SampGetObjectAttribute failed (Status 0x%08lx)\n",
Status);
833 LogonHours->UnitsPerWeek = 0;
834 LogonHours->LogonHours =
NULL;
839 if (RawBuffer ==
NULL)
853 LogonHours->UnitsPerWeek = *((
PUSHORT)RawBuffer);
858 if (LogonHours->LogonHours ==
NULL)
860 TRACE(
"Failed to allocate LogonHours buffer!\n");
865 memcpy(LogonHours->LogonHours,
872 if (RawBuffer !=
NULL)
888 if (LogonHours->UnitsPerWeek > 0)
895 if (RawBuffer ==
NULL)
901 *((
PUSHORT)RawBuffer) = LogonHours->UnitsPerWeek;
904 LogonHours->LogonHours,
915 if (RawBuffer !=
NULL)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
#define NT_SUCCESS(StatCode)
BOOL WINAPI ConvertSidToStringSidW(PSID Sid, LPWSTR *StringSid)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
NTSTATUS SampGetObjectAttribute(PSAM_DB_OBJECT DbObject, LPWSTR AttributeName, PULONG AttributeType, LPVOID AttributeData, PULONG AttributeSize)
NTSTATUS SampSetObjectAttribute(PSAM_DB_OBJECT DbObject, LPWSTR AttributeName, ULONG AttributeType, LPVOID AttributeData, ULONG AttributeSize)
NTSTATUS SampCloseDbObject(PSAM_DB_OBJECT DbObject)
NTSTATUS SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject, IN LPWSTR ContainerName, IN LPWSTR ObjectName, IN ULONG RelativeId, IN SAM_DB_OBJECT_TYPE ObjectType, IN ACCESS_MASK DesiredAccess, OUT PSAM_DB_OBJECT *DbObject)
NTSTATUS SampCreateAccountSid(IN PSAM_DB_OBJECT DomainObject, IN ULONG ulRelativeId, IN OUT PSID *AccountSid)
NTSTATUS SampRemoveMemberFromGroup(IN PSAM_DB_OBJECT GroupObject, IN ULONG MemberId)
NTSTATUS SampOpenGroupObject(IN PSAM_DB_OBJECT DomainObject, IN ULONG GroupId, IN ACCESS_MASK DesiredAccess, OUT PSAM_DB_OBJECT *GroupObject)
NTSTATUS SampRegCloseKey(IN OUT PHANDLE KeyHandle)
NTSTATUS SampRegEnumerateValue(IN HANDLE KeyHandle, IN ULONG Index, OUT LPWSTR Name, IN OUT PULONG NameLength, OUT PULONG Type OPTIONAL, OUT PVOID Data OPTIONAL, IN OUT PULONG DataLength OPTIONAL)
NTSTATUS SampRegDeleteKey(IN HANDLE ParentKeyHandle, IN LPCWSTR KeyName)
NTSTATUS SampRegOpenKey(IN HANDLE ParentKeyHandle, IN LPCWSTR KeyName, IN ACCESS_MASK DesiredAccess, OUT PHANDLE KeyHandle)
NTSTATUS SampRegDeleteValue(IN HANDLE KeyHandle, IN LPCWSTR ValueName)
NTSTATUS SampRegEnumerateSubKey(IN HANDLE KeyHandle, IN ULONG Index, IN ULONG Length, OUT LPWSTR Buffer)
NTSTATUS SampRemoveUserFromAllGroups(IN PSAM_DB_OBJECT UserObject)
NTSTATUS SampRemoveGroupMembershipFromUser(IN PSAM_DB_OBJECT UserObject, IN ULONG GroupId)
static NTSTATUS SampRemoveUserFromDomainAliases(_In_ HANDLE DomainKeyHandle, _In_ PSAM_DB_OBJECT UserObject, _In_ PWSTR UserSidString)
NTSTATUS SampAddGroupMembershipToUser(IN PSAM_DB_OBJECT UserObject, IN ULONG GroupId, IN ULONG Attributes)
NTSTATUS SampOpenUserObject(IN PSAM_DB_OBJECT DomainObject, IN ULONG UserId, IN ACCESS_MASK DesiredAccess, OUT PSAM_DB_OBJECT *UserObject)
NTSTATUS SampGetLogonHoursAttribute(IN PSAM_DB_OBJECT UserObject, IN OUT PSAMPR_LOGON_HOURS LogonHours)
NTSTATUS SampGetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject, IN ULONG UserId, IN ULONG GroupId, OUT PULONG GroupAttributes)
NTSTATUS SampSetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject, IN ULONG UserId, IN ULONG GroupId, IN ULONG GroupAttributes)
NTSTATUS SampSetLogonHoursAttribute(IN PSAM_DB_OBJECT UserObject, IN PSAMPR_LOGON_HOURS LogonHours)
NTSTATUS SampSetUserPassword(IN PSAM_DB_OBJECT UserObject, IN PENCRYPTED_NT_OWF_PASSWORD NtPassword, IN BOOLEAN NtPasswordPresent, IN PENCRYPTED_LM_OWF_PASSWORD LmPassword, IN BOOLEAN LmPasswordPresent)
NTSTATUS SampRemoveUserFromAllAliases(_In_ PSAM_DB_OBJECT UserObject)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
HLOCAL NTAPI LocalFree(HLOCAL hMem)
#define memcpy(s1, s2, n)
#define _swprintf(buf, format,...)
struct _ENCRYPTED_LM_OWF_PASSWORD ENCRYPTED_NT_OWF_PASSWORD
struct _ENCRYPTED_LM_OWF_PASSWORD ENCRYPTED_LM_OWF_PASSWORD
#define KEY_ENUMERATE_SUB_KEYS
_In_ ULONG _In_ ULONG _In_ ULONG Length
struct _GROUP_MEMBERSHIP GROUP_MEMBERSHIP
#define STATUS_MEMBER_IN_GROUP
#define STATUS_NO_MORE_ENTRIES
#define STATUS_MEMBER_NOT_IN_GROUP
ENCRYPTED_LM_OWF_PASSWORD EmptyLmHash
ENCRYPTED_NT_OWF_PASSWORD EmptyNtHash
#define midl_user_allocate
#define STATUS_BUFFER_OVERFLOW
SAM_DB_OBJECT_TYPE ObjectType
struct _SAM_DB_OBJECT * ParentObject
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_OBJECT_NAME_NOT_FOUND
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength