|
Как разбираться с Object в котором SECURITY_DESCRIPTOR как variant safe array of unsigned
|
|||
---|---|---|---|
#18+
Надо дать определеные права (farQUERY_JOBS) определенному пользователю факс-сервера (SYSTEM). На выходе-входе имеем вот эту хрень: FaxSecurity.Descriptor property Код: vbnet 1.
Property valueA Variant that specifies or receives the security descriptor. The security descriptor is a SECURITY_DESCRIPTOR structure and is represented as a variant safe array of unsigned characters (VT_ARRAY | Integer). В .Net оно из Interop возвращается как As Object. Оригинальный код разбора сего на C++ (из SDK) применно такой. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
В общем мне надо: 1) получить из objFaxSecurity.Descriptor As Object текущий DACL: pOldDACL As IntPtr, ключевой видимо будет ф-ция GetSecurityDescriptorDacl 2) добавить в pOldDACL нужные мне права для нужного юзера и получить новый DACL: pNewDACL As IntPtr (это я умею!!! есть коды, делал для папок/файлов, сервисов, кустов реестра и т.п.) 3) впихнуть этот новый pNewDACL обратно в objFaxSecurity.Descriptor As Object, предполагаю SetSecurityDescriptorDacl, ну и применить метод .Save как того требует COM. Вот пытаюсь как-то так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
GetSecurityDescriptorDacl мне пишет ошибку 1305 (уровень редакции неизвестен) COM отдает мне кота в мешке Object ==A Variant that specifies or receives the security descriptor. The security descriptor is a SECURITY_DESCRIPTOR structure and is represented as a variant safe array of unsigned characters (VT_ARRAY | Integer) Мне эта структура по сути не нужна, а нужен указатель pOldDACL в ней сидящий. Но мне нужно из этого Object получить pOldDACL через GetSecurityDescriptorDacl, ну очевидно первый параметр как то по другому надо готовить, как не знаю. vDescriptor .parray +SafeArrayAccessData(?) Есть идеи как это высосать? Голая документация, примеров в гугле ноль, C++ не катит. (аналогов этой security кухни через классические Fax Service API for win2000 нет, только COMEx-либа, она в принципе понятная и VB-ориентированная, но видимо не в данном конкретном действе) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2019, 06:55 |
|
Как разбираться с Object в котором SECURITY_DESCRIPTOR как variant safe array of unsigned
|
|||
---|---|---|---|
#18+
Чет нет идей, как с этим VARIANT из .Net бороться, мутно. Почитал VARIANT и SafeArray Видимо оптимальный вариант, разобрать, осознать (м.б. чуть переделать) C-шный пример C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\netds\fax\faxsecurity под свои нужды и запускать через Shell. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2019, 19:26 |
|
Как разбираться с Object в котором SECURITY_DESCRIPTOR как variant safe array of unsigned
|
|||
---|---|---|---|
#18+
Все таки захотелось сделать по человечески, появилось время и сел этим заниматься. Как-то так Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
В общем вытащил я этот VARIANT c .vt=VT_ARRAY из Object и получил искомый g_pDACL… разбираюсь дальше. Ну, на свой вопрос "Как разбираться?" по крайней мере ответил. Понять бы куда воткнуть SafeArrayUnAccessData (в SDK-коде нету, но быть должен, но там встречаются ляпы). Смысл в том чтоб не грохнуть то что связано с полученным g_pSecurityDescriptor и g_pDACL раньше времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 21:32 |
|
|
start [/forum/topic.php?fid=20&msg=39795986&tid=1398994]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
142ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 255ms |
0 / 0 |