NTSTATUS SamrSrvCreateUser2( IN handle_t hBinding, IN DOMAIN_HANDLE hDomain, IN UNICODE_STRING *pAccountName, IN DWORD dwAccountFlags, IN DWORD dwAccessMask, OUT ACCOUNT_HANDLE *phUser, OUT PDWORD pdwAccessGranted, OUT PDWORD pdwRid ) { NTSTATUS ntStatus = STATUS_SUCCESS; PDOMAIN_CONTEXT pDomCtx = NULL; pDomCtx = (PDOMAIN_CONTEXT)hDomain; if (pDomCtx == NULL || pDomCtx->Type != SamrContextDomain) { ntStatus = STATUS_INVALID_HANDLE; BAIL_ON_NTSTATUS_ERROR(ntStatus); } if (!(pDomCtx->dwAccessGranted & DOMAIN_ACCESS_CREATE_USER)) { ntStatus = STATUS_ACCESS_DENIED; BAIL_ON_NTSTATUS_ERROR(ntStatus); } ntStatus = SamrSrvCreateAccount(hBinding, hDomain, pAccountName, DS_OBJECT_CLASS_USER, dwAccountFlags, dwAccessMask, phUser, pdwAccessGranted, pdwRid); BAIL_ON_NTSTATUS_ERROR(ntStatus); cleanup: return ntStatus; error: *phUser = NULL; *pdwAccessGranted = 0; *pdwRid = 0; goto cleanup; }
NTSTATUS SamrSrvCreateDomAlias( /* [in] */ handle_t hBinding, /* [in] */ DOMAIN_HANDLE hDomain, /* [in] */ UNICODE_STRING *pAliasName, /* [in] */ UINT32 dwAccessMask, /* [out] */ ACCOUNT_HANDLE *phAlias, /* [out] */ UINT32 *pdwRid ) { NTSTATUS ntStatus = STATUS_SUCCESS; PDOMAIN_CONTEXT pDomCtx = NULL; PWSTR pwszAliasName = NULL; UNICODE_STRING Name = {0}; UINT32 ulAccessGranted = 0; pDomCtx = (PDOMAIN_CONTEXT)hDomain; if (pDomCtx == NULL || pDomCtx->Type != SamrContextDomain) { ntStatus = STATUS_INVALID_HANDLE; BAIL_ON_NTSTATUS_ERROR(ntStatus); } if (!(pDomCtx->dwAccessGranted & DOMAIN_ACCESS_CREATE_ALIAS)) { ntStatus = STATUS_ACCESS_DENIED; BAIL_ON_NTSTATUS_ERROR(ntStatus); } ntStatus = SamrSrvGetFromUnicodeString(&pwszAliasName, pAliasName); BAIL_ON_NTSTATUS_ERROR(ntStatus); ntStatus = SamrSrvInitUnicodeStringEx(&Name, pwszAliasName); BAIL_ON_NTSTATUS_ERROR(ntStatus); ntStatus = SamrSrvCreateAccount(hBinding, hDomain, &Name, DS_OBJECT_CLASS_LOCAL_GROUP, 0, dwAccessMask, phAlias, &ulAccessGranted, pdwRid); if (ntStatus == STATUS_USER_EXISTS) { ntStatus = STATUS_ALIAS_EXISTS; BAIL_ON_NTSTATUS_ERROR(ntStatus); } cleanup: if (pwszAliasName) { SamrSrvFreeMemory(pwszAliasName); } SamrSrvFreeUnicodeStringEx(&Name); return ntStatus; error: *phAlias = NULL; *pdwRid = 0; goto cleanup; }