Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2008, 23:01   #1
meinung
 
Регистрация: 13.03.2007
Сообщений: 3
По умолчанию бан доступа в NTFS

Доброго временис суток, суть следующая
как програмно создать пользователя, чтобы его не было видно в списке пользователей если включено быстрое переключение и наделить его правами на на определенную директорию а остальным оставить галочку только список файллов и чтение. заранее спс
meinung вне форума Ответить с цитированием
Старый 07.03.2008, 23:11   #2
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Создешь обычно, а в "редакторовании политики безопасности" - ставишь в поле "отклонить локальный (интерактивный) вход" - имя того юзверя. Там же надо запретить и удаленный вход. Все.
SkyM@n вне форума Ответить с цитированием
Старый 08.03.2008, 00:55   #3
meinung
 
Регистрация: 13.03.2007
Сообщений: 3
По умолчанию

SKY@N речь идет о програмном споссобе осуществления сего под форточками
meinung вне форума Ответить с цитированием
Старый 08.03.2008, 01:03   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Программный способ - NetUserAdd, NetGroupAdd, NetGroupAddUser и т.д.
B_N вне форума Ответить с цитированием
Старый 08.03.2008, 05:08   #5
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Цитата:
Сообщение от meinung Посмотреть сообщение
SKY@N речь идет о програмном споссобе осуществления сего под форточками
Я а где-то упоминал о солярисе или о досе? НТФС, к счастью есть только в винде. Там я и имел ввиду настраивать. Если нужно таки программно - то копай в сторону WMI - там можно делать все, что позволяет фантазия.
SkyM@n вне форума Ответить с цитированием
Старый 08.03.2008, 11:39   #6
meinung
 
Регистрация: 13.03.2007
Сообщений: 3
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Программный способ - NetUserAdd, NetGroupAdd, NetGroupAddUser и т.д.
дайте пример полж. я эти функции первый раз вижу
meinung вне форума Ответить с цитированием
Старый 09.03.2008, 03:21   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от meinung Посмотреть сообщение
дайте пример полж. я эти функции первый раз вижу
Код:
#define UNICODE
#define _WIN32_WINNT	0x0501										// Windows NT 5.1 (Windows XP)

#include <windows.h>
#include <lm.h>
#include <stdio.h>

static const LPWSTR lpwszServerName			= NULL;					// Локальный компьютер
static const LPWSTR lpwszNewUserName		= L"TEST_USER";
static const LPWSTR lpwszNewUserPassword	= L"abcdef";
static const LPWSTR lpwszTestDirectory		= L"C:\\TEST_DIRECTORY";

int wmain(int argc, WCHAR* argv[])
{
	DWORD					i;
	DWORD					cbSid = 0;
	DWORD					cbAclSize = 0;
	DWORD					cchReferencedDomainName = 0;

	USER_INFO_1				ui1;
	SID_NAME_USE			sneUse;
	PSID					pUserSid = NULL;
	PSID					pEveryOneSid = NULL;
	PACL					pAcl = NULL;
	SECURITY_ATTRIBUTES		SecAttribs;
	SECURITY_DESCRIPTOR		SecDescriptor;
	LPWSTR					lpwszReferencedDomainName = NULL;
	
	NET_API_STATUS			netStatus;
	BOOL					fSuccess = TRUE;

	HANDLE					hProcessHeap = GetProcessHeap();

	__try{
		do {
			RtlZeroMemory(&ui1, sizeof(ui1));
			ui1.usri1_name			= lpwszNewUserName;
			ui1.usri1_password		= lpwszNewUserPassword;
			ui1.usri1_priv			= USER_PRIV_USER;
			ui1.usri1_flags			= UF_DONT_EXPIRE_PASSWD;
			
			// Создаем пользователя
			netStatus = NetUserAdd(lpwszServerName, 1, (LPBYTE)&ui1, NULL);
			if( NERR_UserExists != netStatus && NERR_Success != netStatus ){
				fSuccess = FALSE;
				break;
			}
			
			// Берём Security identifier нового пользователя
			if(! LookupAccountNameW(lpwszServerName, lpwszNewUserName, NULL, &cbSid, NULL, &cchReferencedDomainName, &sneUse) ){
				if(GetLastError() == 122L){
					pUserSid = 
						(SID*) HeapAlloc(hProcessHeap, HEAP_ZERO_MEMORY, SECURITY_MAX_SID_SIZE);
					lpwszReferencedDomainName = 
						(LPWSTR) HeapAlloc(hProcessHeap, 0, cchReferencedDomainName * sizeof(WCHAR));
					if(
						! LookupAccountNameW(
								lpwszServerName, 
								lpwszNewUserName, 
								pUserSid, 
								&cbSid, 
								lpwszReferencedDomainName, 
								&cchReferencedDomainName, 
								&sneUse)
					) {
						fSuccess = FALSE;
						break;
					}
				}
				else {
					fSuccess = FALSE;
					break;
				}
			}

			// Создаем стандартный Security identifier "для всех"
			pEveryOneSid = 
				(SID*) HeapAlloc(hProcessHeap, HEAP_ZERO_MEMORY, SECURITY_MAX_SID_SIZE);
			if(! CreateWellKnownSid(WinWorldSid, NULL, pEveryOneSid, &cbSid)){
				fSuccess = FALSE;
				break;			
			}
			
			// Выделяем память под ACL (Access Control List)
			cbAclSize = sizeof(ACL) 
						+ sizeof(ACCESS_ALLOWED_ACE) * 2
						+ GetLengthSid(pUserSid)
						+ GetLengthSid(pEveryOneSid);
			pAcl = (PACL) HeapAlloc(hProcessHeap, HEAP_ZERO_MEMORY, cbAclSize);
			
			// Инициализируем ACL
			if(!InitializeAcl(pAcl, cbAclSize, ACL_REVISION)){
				fSuccess = FALSE;
				break;
			}
			
			// Добавляем к новому ACL права для двух "групп" - для всех 
			// и для нового пользователя
			if(
				!
				(
					// только чтение для всех
					AddAccessAllowedAce(pAcl, ACL_REVISION, READ_CONTROL, pEveryOneSid)
					&&
					// полный доступ для нового пользователя
					AddAccessAllowedAce(pAcl, ACL_REVISION, GENERIC_ALL|STANDARD_RIGHTS_ALL|SPECIFIC_RIGHTS_ALL, pUserSid)
				)
			){
				fSuccess = FALSE;
				break;
			}
			
			// Инициализируем дескриптор защиты
			if(!InitializeSecurityDescriptor(&SecDescriptor, SECURITY_DESCRIPTOR_REVISION)){
				fSuccess = FALSE;
				break;
			}
			SetSecurityDescriptorDacl(&SecDescriptor, TRUE, pAcl, FALSE);
			SetSecurityDescriptorGroup(&SecDescriptor, NULL, FALSE);
			SetSecurityDescriptorSacl(&SecDescriptor, FALSE,NULL,FALSE);

			// Устанавливаем права доступа в соответствии с новым дескриптором
			SecAttribs.nLength = sizeof(SECURITY_ATTRIBUTES);
			SecAttribs.bInheritHandle = FALSE;
			SecAttribs.lpSecurityDescriptor = &SecDescriptor;

			// И создаем объект файловой системы
			CreateDirectoryW(lpwszTestDirectory, &SecAttribs);
		}while (0);
	}
	__except ( EXCEPTION_EXECUTE_HANDLER ) {
		fSuccess = FALSE;
	}
	
	if(fSuccess) {
		wprintf(
			L"Directory \"%s\"created and access permissions assigned successfully.\n", 
			lpwszTestDirectory);
	}
	else {
		wprintf(
			L"Error %d encountered.\n",
			GetLastError());
	}
	
	HeapFree(hProcessHeap, 0, pUserSid);
	HeapFree(hProcessHeap, 0, lpwszReferencedDomainName);
	HeapFree(hProcessHeap, 0, pEveryOneSid);
	HeapFree(hProcessHeap, 0, pAcl);

	return 0;
}
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нарушение доступа Perception Помощь студентам 9 11.07.2008 14:44
Вывод атрибутов файла в NTFS un07 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 27.02.2008 19:47
нет права доступа Rio309 Общие вопросы Delphi 7 17.02.2008 09:38
Права доступа NTFS LinCoRe Windows 6 07.02.2008 21:24
NTFS -> FAT JoanM Свободное общение 2 16.08.2007 08:37