Конференция "WinAPI" » Shell Change Notify под system... [D7, WinXP]
 
  • istok (30.10.13 16:41) [0]
    использую вот эту штуку для мониторинга shell изменений:

    http://delphi.about.com/library/code/ncaa030403b.htm

    проблема в том, что если мой процесс запущен под system (т.е. в текущей сессии пользователя, но под системной учеткой), то нотификации не приходят

    можно ли решить этот вопрос под системной учеткой?
  • istok20 © (30.10.13 16:55) [1]
    ps: в win7 такой проблемы нет, в XP есть.
  • DVM © (30.10.13 17:00) [2]
    А у этого процесса окна вообще имеются?
  • DVM © (30.10.13 17:12) [3]
    Скорее всего не получится заставить работать SHChangeNotifyRegister под System.

    Кстати, что ты мониторишь? Почти для всего есть другие методы, не используя SHChangeNotifyRegister.
  • Rouse_ © (30.10.13 18:45) [4]

    > проблема в том, что если мой процесс запущен под system
    > (т.е. в текущей сессии пользователя, но под системной учеткой)

    system - это мало того что не под текущей учеткой пользователя, так еще и на другом десктопе, т.е. у него не "winsta0\default", стало быть нотификации от десктопа пользователя будут идти только в рамках оного, а твой к нему никаким боком не относится. Отсюда делай вывод...
  • все арамисы, а я Дартаньян (30.10.13 21:53) [5]

    > system - это мало того что не под текущей учеткой пользователя,
    >  так еще и на другом десктопе, т.е. у него не "winsta0\default"
    разве станция/десктоп зависит от учётки? а как же рецепты "прописываем cmd.exe в планировщик и получаем командный процессор на нашем десктопе и с системной учёткой"?
  • Rouse_ © (30.10.13 22:06) [6]
    С "повышение привилегий" может быть, а не "системная учетка и текущий десктоп"?
  • все арамисы, а я Дартаньян (30.10.13 22:08) [7]
    ну… честно говоря, когда об этом читал, "повышения привилегий" ещё не было в природе (но различные десктопы были).
  • Rouse_ © (30.10.13 22:17) [8]
    Вот тут немножко есть: http://rouse.drkb.ru/winapi.php#servicenotifyer
  • DVM © (30.10.13 22:42) [9]
    Странно, что у него работает под Win7, там ведь тем более не должно.
  • Rouse_ © (30.10.13 22:44) [10]

    > DVM ©   (30.10.13 22:42) [9]
    > Странно, что у него работает под Win7, там ведь тем более
    > не должно.

    Я не уверен в том, что в данном утверждении автор не ошибся :)
  • istok (30.10.13 23:05) [11]

    > А у этого процесса окна вообще имеются?


    ессно, передаю его в create, а то работать не будет)


    > system - это мало того что не под текущей учеткой пользователя,
    >  так еще и на другом десктопе, т.е. у него не "winsta0\default",
    >  стало быть нотификации от десктопа пользователя будут идти
    > только в рамках оного, а твой к нему никаким боком не относится.
    >  Отсюда делай вывод...


    с чего это вы взяли) этот процесс еще как работает в winsta0\default, я его сам там запускаю...  его сервис запускает через CreateProcessAsUser с соответствующими параметрами, в том числе с lpDesktop := PChar('winsta0\default');


    > Странно, что у него работает под Win7, там ведь тем более
    > не должно.


    еще как должно), речь об одной и той же сессии юзера, не путаем с сервисами и нулевой сессией)
  • istok20 © (30.10.13 23:07) [12]

    > Вот тут немножко есть: http://rouse.drkb.ru/winapi.php#servicenotifyer


    да причем тут сервисы) я где-то писал, что это сервис?)))  оконный процесс под системной учеткой в сессии юзера и сервис - оч разные вещи, не так ли?))
  • istok20 © (30.10.13 23:08) [13]

    > Я не уверен в том, что в данном утверждении автор не ошибся
    > :)


    не ошибся)


    > Кстати, что ты мониторишь? Почти для всего есть другие методы,
    >  не используя SHChangeNotifyRegister.


    create\delete\rename\driveadd\driveremove
  • Rouse_ © (30.10.13 23:16) [14]

    > его сервис запускает через CreateProcessAsUser с соответствующими
    > параметрами, в том числе с lpDesktop := PChar('winsta0\default');

    Ну если так, то да :)
    Изначально то ты говорил совершенно про другое :)

    Тогда поищи здесь же на форуме посты о том что запущенный из под сервиса процесс не имеет полных прав по токенам (или что-то в этом роде было) где-то полгода назад эта ветка поднималась.
    Лучше через зеркало delphimaster.net
  • istok20 © (30.10.13 23:27) [15]

    > Rouse_ ©   (30.10.13 23:16) [14]


    и это может касаться только xp?
  • DVM © (31.10.13 00:21) [16]

    > istok20 ©   (30.10.13 23:08) [13]


    > create\delete\rename\

    Это применительно к файлам? С этим ReadDirectoryChangesW прекрасно справляется.
  • istok20 © (31.10.13 00:54) [17]

    > Это применительно к файлам? С этим ReadDirectoryChangesW
    > прекрасно справляется.


    да, к файлам

    и будет работать адекватно с WatchSubtree для мониторинга изменений во всех папках всех дисков?

    а как быть с driveadd\driveremove  ? тоже есть иное решение задачи?
  • DVM © (31.10.13 10:11) [18]

    > istok20 ©   (31.10.13 00:54) [17]


    > и будет работать адекватно с WatchSubtree для мониторинга
    > изменений во всех папках всех дисков?

    А почему нет? Можно вообще посмотреть как реализован SHChangeNotifyRegister в исходниках ReactOS или Win2000 (что на торрентах) и сделать также.
  • istok (07.11.13 13:15) [19]
    вот еще странная вещь, в одном проекте TSHChangeNotify присылает несколько сообщений на события, тупо дублирует их (например, несколько delete вместо одного). в то время как в других проектах работает корректно.  в какую сторону копать?
  • брат Птибурдукова (07.11.13 14:57) [20]

    > istok   (07.11.13 13:15) [19]
    message.result?
  • zewwer © (08.11.13 10:04) [21]
    у меня похожая ситуация тоже приходит по несколько сообщений(

    ___________
    http://www.dulcetstone.ru/collection/lazurit-2
 
Конференция "WinAPI" » Shell Change Notify под system... [D7, WinXP]
Есть новые Нет новых   [134427   +35][b:0][p:0.001]