SetSecurityInfo и Notification
От: Y2K  
Дата: 18.02.03 06:44
Оценка:
Доброго времени суток!
Столкнулся с проблемой. Пишу приложение, ведущее журнал печати на принтере.
Пользуюсь функциями Find*PrinterChangeNotification. Все работает без вопросов,
но есть желание, чтобы снять задачу можно было только с правами администратора.
Приведенный ниже код с вызовами SetSecurityInfo решает эту проблему, но
перестает работать функция FindFirstPrinterChangeNotification (возвращает
INVALID_HANDLE_VALUE). Кто сталкивался с подобной ситуацией, подскажите, пожалуйста,
из-за чего это происходит.


ACL = new _ACL;
if (InitializeAcl(ACL,sizeof(_ACL),ACL_REVISION) && (IsValidAcl(ACL)))
SetSecurityInfo(
GetCurrentProcess(),
SE_WINDOW_OBJECT/*SE_KERNEL_OBJECT*/,
DACL_SECURITY_INFORMATION,
NULL,
NULL,
ACL,
NULL);

hNotify = FindFirstPrinterChangeNotification(
m_hPrinter,
PRINTER_CHANGE_ALL,
0,
&m_no);

P.S. Я знаю, что самый правильный подход, создание службы. Но уже зацепился за проблему,
не отпускает
Re: SetSecurityInfo и Notification
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 18.02.03 08:44
Оценка:
Y2K>ACL = new _ACL;
приветик!
Может не в тему, но на всякий случай: а ты ACL чем-нить инициализируешь? в смысле значение туда кладёшь?

Денис.
... << RSDN@Home 1.0 beta 6a >>
Re[2]: SetSecurityInfo и Notification
От: Y2K  
Дата: 18.02.03 10:15
Оценка:
Здравствуйте, Denis, Вы писали:

Y2K>>ACL = new _ACL;

D>приветик!
D>Может не в тему, но на всякий случай: а ты ACL чем-нить инициализируешь? в смысле значение туда кладёшь?

D>Денис.


Инициализирую. Это я для примера кусок кода бросил, чтобы понятно было, о чем речь
Хотя и просто обнуление списка (без инициализации) тоже нормально срабатывает.
Я тут за утро проблему обошел, если кому интересно. Я сохраняю ACL и перед выполнением
FindFirstChangeNotification возвращаю старое значение списка. После выполнения устанавливаю новое.
FindNextChangeNotification нормально работает с новым. Дыра небольшая, но пойдет в принципе...
Решение есть, но вопрос остался без ответа Проблема то с FindFirstChangeNotification в чем?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.