Здравствуйте! Подскажите пожалуйста где можно найти описание функций Samlib.dll. Знаю они типа не документированы. Можно даже сорц проги, что использующую Samlib.dll. К примеру samview.exe
Посмотрел я вчера на вызовы в samview.exe, оказалось я ошибся, там RPC - вызовы минуя Samlib.dll.( Зашел еще на processhacker.sourceforge.net посмотрел по внимательней и нашел заголовочный файл ntsam.h так что СПАСИБО hors за помощь. Только беда в том что не пишу я на С++ и не все в ней понимаю! Может, если вам не тягость помочь мне в некоторых вопросах?
Никак не удается вызвать функцию, ну незнаю я что тудазадавать!!( Помогите пожалуста! Код (Text): __checkReturn NTSTATUS NTAPI SamConnect ( __in_opt PUNICODE_STRING ServerName, __out PSAM_HANDLE ServerHandle, __in ACCESS_MASK DesiredAccess, __in POBJECT_ATTRIBUTES ObjectAttributes ) Вот только что понял. ServerName - указатель на строку с именем машины в формате юникод ServerHandle - Возвращаемый указатель на заголовок ACCESS_MASK - Я так понимаю, это битовая маска доступа!? Но какой параметр передать ХЗ POBJECT_ATTRIBUTES - А вот тут не черта не понял!?????? Объясните чайнику кто нибудь. ПОЖАЛУЙСТА
typedef struct _LSA_UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } LSA_UNICODE_STRING, *PLSA_UNICODE_STRING, UNICODE_STRING, *PUNICODE_STRING; как оказалось это не указатель на строку,а указатель на структуру. по остальному - хз, никогда не сталкивался с данной либой *еще бы рассказале какой еррор возвращает (пробовали же кольнуть данную функу с аксесом хоть какимто?)
{Access Denied} A process has requested access to an object, but has not been granted those access rights.
Shadovv13 STATUS_ACCESS_DENIED - {Access Denied} A process has requested access to an object, but has not been granted those access rights. прикрепил полезную тулзу скачаную гдет на васме)
СПАСИБО! тоже нашел! Процесс запросил доступ к объекту, однако права доступа не предоставлены. И че дале?? Я уже все права перепробовал!!
К сожалению тот же результат! Я думаю надо правильно указать объект в "_in POBJECT_ATTRIBUTES ObjectAttributes". А уж потом права доступа.
Shadovv13 для начала правильно указать ось и сервер, а еще лучше рассказать что вы пытаетесь сделать. Возможно тогда найдутся те кто сможет помочь, а то, как говорится - гадалки в гугле водятся.
ASMatic Есть такой сервис NtRaiseHardError, который выводит текст с описанием статуса. Сие реализовано через RtlFindMessage(RT_MESSAGETABLE), в ядре и нэйтиве. Посему незачем таскать левые тулзы, я например смотрю коды(те, которые не помню) в ntstatus.h, иначе можно напрямую дёрнуть ZwRaiseHardError().
Shadovv13 Это описание обьекта как обычно. Да и ваша эта апи опенсурсная: Код (Text): BOOLEAN CtLsaLookupNamesInSamDomain( IN OPTIONAL PUNICODE_STRING WorkstationName, IN PUNICODE_STRING DomainControllerName, IN PUNICODE_STRING SamDomainName, IN CT_SAM_ACCOUNT_TYPE SamAccountType ) /*++ Routine Description: This function enumerates all the SAM accounts of a specified type in a specified SAM domain on a specified target system. The system must be one of the following: o The Workstation itself. o A Domain Controller for the Primary Domain of the Workstation. o A Domain Controller for one of the Trusted Domains of the Workstation. Having enumerated the accounts, the function then performs an LsaLookupNames call via the specified Workstation to lookup all of these account names, and then compares the returned information with that expected. Arguments: WorkstationName - Specifies a Workstation Name. The name may be the NULL string, which means the current system. DomainControllerName - Specifies the name of a target Domain Controller for (the Workstation's Primary Domain or one of its Trusted Domains. SamDomainName - Specifies the name of the SAM Domain. This is either the BUILTIN Domain or the name of the Accounts Domain. SamAccountType - Specifies the type of SAM account to be enumerated and looked up. Return Values: BOOLEAN - TRUE if successful, else FALSE. --*/ { NTSTATUS Status; BOOLEAN BooleanStatus = TRUE; SAM_HANDLE SamServerHandle = NULL; SAM_HANDLE SamDomainHandle = NULL; OBJECT_ATTRIBUTES SamObjectAttributes; OBJECT_ATTRIBUTES LsaObjectAttributes; SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService; PSID SamDomainSid = NULL; ULONG CountReturned; ULONG EnumerationContext; PSAM_RID_ENUMERATION EnumerationBuffer = NULL; ULONG PreferedMaximumLength; ULONG RidIndex; ULONG NameIndex; ULONG UserAccountControl; LSA_HANDLE PolicyHandle = NULL; PUNICODE_STRING SamDomainAccountNames = NULL; ULONG SamDomainAccountNamesLength; PLSA_REFERENCED_DOMAIN_LIST ReferencedDomains = NULL; PLSA_TRANSLATED_SID Sids = NULL; PSID_NAME_USE Uses = NULL; PULONG RelativeIds = NULL; ULONG RelativeIdsLength; PUNICODE_STRING ThrowawayNames = NULL; LONG ConstantDomainIndex; LONG DomainIndex; // // Setup Object Attributes for connecting to SAM on the specified // DomainController. // CtLsaInitObjectAttributes( &SamObjectAttributes, &SecurityQualityOfService ); // // Connect to the SAM server. // Status = SamConnect( DomainControllerName, &SamServerHandle, SAM_SERVER_LOOKUP_DOMAIN, &SamObjectAttributes ); if (!NT_SUCCESS(Status)) { Код (Text): // LSA Component Test for RPC API - main program // // // ///////////////////////////////////////////////////////////////////////////// VOID CtLsaInitObjectAttributes( IN POBJECT_ATTRIBUTES ObjectAttributes, IN PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService ) /*++ Routine Description: This function initializes the given Object Attributes structure, including Security Quality Of Service. Memory must be allcated for both ObjectAttributes and Security QOS by the caller. Arguments: ObjectAttributes - Pointer to Object Attributes to be initialized. SecurityQualityOfService - Pointer to Security QOS to be initialized. Return Value: None. --*/ { SecurityQualityOfService->Length = sizeof(SECURITY_QUALITY_OF_SERVICE); SecurityQualityOfService->ImpersonationLevel = SecurityImpersonation; SecurityQualityOfService->ContextTrackingMode = SECURITY_DYNAMIC_TRACKING; SecurityQualityOfService->EffectiveOnly = FALSE; // // Set up the object attributes prior to opening the LSA. // InitializeObjectAttributes( ObjectAttributes, NULL, 0L, NULL, NULL ); // // The InitializeObjectAttributes macro presently stores NULL for // the SecurityQualityOfService field, so we must manually copy that // structure for now. // ObjectAttributes->SecurityQualityOfService = SecurityQualityOfService; } Код (Text): // // Setup ObjectAttributes for SamConnect call. // InitializeObjectAttributes(&ObjectAttributes, NULL, 0, 0, NULL); ObjectAttributes.SecurityQualityOfService = &SecurityQos; SecurityQos.Length = sizeof(SecurityQos); SecurityQos.ImpersonationLevel = SecurityIdentification; SecurityQos.ContextTrackingMode = SECURITY_STATIC_TRACKING; SecurityQos.EffectiveOnly = FALSE; Status = SamConnect( UncComputerName, &SamHandle, SAM_SERVER_LOOKUP_DOMAIN, &ObjectAttributes ); if ( !NT_SUCCESS(Status) ) { KdPrint(("MspChangePasswordSam: Cannot open sam on %wZ, status %x\n", UncComputerName, Status)); DomainHandle = NULL; goto Cleanup; }