Форум: "Система";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
ВнизУправление притером через WinSpool (WinXP) Найти похожие ветки
← →
--olg- (2003-10-03 09:53) [0]Пытаюсь управлять принтером через WinSpool (WinXP).
Функция WinSpool.SetPrinter возвращает ERROR_ACCESS_DENIED.
Что делать?
← →
N169 (2003-10-03 10:54) [1]ERROR_ACCESS_DENIED
Access is denied.
(Возможно, пользователю с данными привелегиями не дозволено выполнять такую операцию.)
← →
--olg- (2003-10-06 08:37) [2]Данную операцию делаю под правами администратора.
← →
--olg- (2003-10-06 08:43) [3]В Инете нашел следующий модуль, задаю привелегии SeDebugPrivilege все равно не получается.
{ **** UBPFD *********** by delphibase.endimus.ru ****
>> Получение дополнительных привилегий под НТ
В принципе и так все понятно - задаеш название привилегии и если это возможно, то система их тебе дает
Зависимости: uses Windows, SysUtils;
Автор: Денис, LiquidStorm_HSS@yahoo.com, Lviv
Copyright: by LiquidStorm, HomeSoftStudios(tm) aka Denis L.
Дата: 9 августа 2003 г.
**************************************************** }
unit NTPrivelegsU;
////////////////////////////////////////////////////////////////////////
// //
// NT Defined Privileges //
// //
////////////////////////////////////////////////////////////////////////
interface
uses Windows, SysUtils;
const SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege";
const SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege";
const SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege";
const SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege";
const SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege";
const SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege";
const SE_TCB_NAME = "SeTcbPrivilege";
const SE_SECURITY_NAME = "SeSecurityPrivilege";
const SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege";
const SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege";
const SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege";
const SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege";
const SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege";
const SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege";
const SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege";
const SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege";
const SE_BACKUP_NAME = "SeBackupPrivilege";
const SE_RESTORE_NAME = "SeRestorePrivilege";
const SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
const SE_DEBUG_NAME = "SeDebugPrivilege";
const SE_AUDIT_NAME = "SeAuditPrivilege";
const SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege";
const SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege";
const SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege";
function AdjustPriviliges(const PrivelegStr: String) : Bool; forward;
implementation
function AdjustPriviliges(const PrivelegStr: String) : Bool;
var
hTok : THandle;
tp : TTokenPrivileges;
begin
Result := False;
// Get the current process token handle so we can get privilege.
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hTok) then
try
// Get the LUID for privilege.
if LookupPrivilegeValue(nil,PChar(PrivelegStr), tp.Privileges[0].Luid) then
begin
tp.PrivilegeCount := 1; // one privilege to set
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
// Get privilege for this process.
Result := AdjustTokenPrivileges(hTok, False, tp, 0, PTokenPrivileges(nil)^, PDWord(nil)^)
end
finally
// Cannot test the return value of AdjustTokenPrivileges.
if (GetLastError <> ERROR_SUCCESS) then
raise Exception.Create("AdjustTokenPrivileges enable failed");
CloseHandle(hTok)
end
else raise Exception.Create("OpenProcessToken failed");
end;
end.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c