Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 165
от 23.11.2005, 09:39

Администратор:Калашников О.А.
В рассылке:Подписчиков: 119, Экспертов: 15
В номере:Вопросов: 2, Ответов: 5


Вопрос № 29731: Уважаемые эксперты! Как узнать путь к папке винды и к системной папке? Можно этии пути узнать для другого компьютера, включенного в локальную сеть? ..
Вопрос № 29737: Уважаемые эксперты! Можно защитить папку с файлами от удаления (и изменения желательно) паролем средствами NTFS? Но так, чтобы их могла удалить моя спецпрограмма. Или можно сделать это только с помощью левой проги? Вообщем, мне надо, чтобы, юзер не м...

Вопрос № 29.731
Уважаемые эксперты! Как узнать путь к папке винды и к системной папке? Можно этии пути узнать для другого компьютера, включенного в локальную сеть?
Отправлен: 17.11.2005, 20:12
Вопрос задал: Александр А.А. (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: AlexanderZh
Здравствуйте, Александр А.А.!
Залезь в свойства компьютера - переменные среды. потом их можно использовать в путях в виде "%WINDIR%". Как по сети - не знаю
Ответ отправил: AlexanderZh (статус: 2-ой класс)
Отправлен: 18.11.2005, 11:07

Отвечает: _Виталий
Здравствуйте, Александр А.А.!
Код для модуля в приложении. Две функции позвращающие пути к интересующим вас папкам.

Приложение:

Ответ отправил: _Виталий (статус: 8-ой класс)
Отправлен: 18.11.2005, 11:48
Оценка за ответ: 5

Отвечает: Залетин Виталий Викторович
Здравствуйте, Александр А.А.!

Private Declare Function GetWindowsDirectory Lib "kernel32" alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Declare Function GetSystemDirectory Lib "kernel32.dll" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (статус: 7-ой класс)
Отправлен: 20.11.2005, 15:18


Вопрос № 29.737
Уважаемые эксперты! Можно защитить папку с файлами от удаления (и изменения желательно) паролем средствами NTFS? Но так, чтобы их могла удалить моя спецпрограмма. Или можно сделать это только с помощью левой проги? Вообщем, мне надо, чтобы, юзер не мог удалить данные проги обычным способом удаления файлов, а файлы можно было удалить спецпрогой. Ну и надо при попытке удаления выдавать определённое мной сообщение - значит одними возможностями NTFS не обойтись, или можно? Может, где можно почитать про это?
Отправлен: 17.11.2005, 21:53
Вопрос задал: Александр А.А. (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Мухамедзянов Геннадий
Здравствуйте, Александр А.А.!
Если я правильно понял вопрос, то вам надо закрыть папку пользователю для удаления и изменения. Так в свойствах папки, если пользователь локальный и не имеет прав локального администратора можно выставить права доступа к папке именно для определенного пользователя. Для этого щелкаем на папке которую нужно закрыть правой кнопкой мыши, и выбираем свойства папки, далее в горизонтальных вкладках, Безопасность. В этой вкладке можно выставить все свойства, например добавив пользователя(причем этот пользователь реально существует на компьютере) и дать ему права только на чтение...

---------
Это очень интересно... надо разобраться!!!
Ответ отправил: Мухамедзянов Геннадий (статус: 4-ый класс)
Отправлен: 18.11.2005, 16:36

Отвечает: Залетин Виталий Викторович
Нет, товарищ хочет, чтоб это все можно было рограммно сделать.
Если есть MSDN - покопайтесь там. Я тоже заинтересовался этой темой и позже сообщу, что нашел и как. Пока могу предложить такую муть (я это только что нашел на http://www.retranslator.ru/forums/messages/919/2222/all). Сам пока не разобрался, но чую, что по теме.

Хочешь NTFS permissions менять? Hа здоровье!

=========Beginning of the citation==============
Option Explicit

' Success status of high level access control APIs
Private Const ERROR_SUCCESS = 0&

' Type of Securable Object we are operating in this sample code
Private Const SE_FILE_OBJECT = 1&

' The Security Information constants required
Private Const DACL_SECURITY_INFORMATION = 4&
Private Const GRANT_ACCESS = 1&
Private Const SET_ACCESS = 2&

' Standard access rights extracted from WinNT.h
Private Const SYNCHRONIZE = &H100000
Private Const READ_CONTROL = &H20000
Private Const WRITE_DAC = &H40000
Private Const WRITE_OWNER = &H80000
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Private Const DELETE = &H10000

' Generic access rights extracted from WinNT.h
Private Const GENERIC_ALL = &H10000000
Private Const GENERIC_EXECUTE = &H20000000
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000

' Inheritance Flags
Private Const CONTAINER_INHERIT_ACE = &H2
Private Const OBJECT_INHERIT_ACE = &H1

' The TRUSTEE structure identifies the user account, group account, or logon
session
' to which an ACE applies. The structure can use a name or a security
identifier (SID)
' to identify the trustee.

' Access control APIs, such as SetEntriesInAcl and
GetExplicitEntriesFromAcl, use this
' structure to identify the account associated with the access-control or
audit-control
' information in an EXPLICIT_ACCESS structure.
Private Type TRUSTEE
pMultipleTrustee As Long
MultipleTrusteeOperation As Long
TrusteeForm As Long
TrusteeType As Long
ptstrName As String
End Type

' EXPLICIT_ACCESS structure that specifies access-control information for a
specified
' trustee such as access mask as well as inheritance flags
Private Type EXPLICIT_ACCESS
grfAccessPermissions As Long
grfAccessMode As Long
grfInheritance As Long
pTRUSTEE As TRUSTEE
End Type

' High Level access control API declarations
Private Declare Sub BuildExplicitAccessWithName Lib "Advapi32.dll" Alias _
"BuildExplicitAccessWithNameA" _
(ea As Any, _
ByVal TrusteeName As String, _
ByVal AccessPermissions As Long, _
ByVal AccessMode As Integer, _
ByVal Inheritance As Long)

Private Declare Function SetEntriesInAcl Lib "Advapi32.dll" Alias _
"SetEntriesInAclA" _
(ByVal CountofExplicitEntries As Long, _
ea As Any, _
ByVal OldAcl As Long, _
NewAcl As Long) As Long

Private Declare Function GetNamedSecurityInfo Lib "Advapi32.dll" Alias _
"GetNamedSecurityInfoA" _
(ByVal ObjName As String, _
ByVal SE_OBJECT_TYPE As Long, _
ByVal SecInfo As Long, _
ByVal pSid As Long, _
ByVal pSidGroup As Long, _
pDacl As Long, _
ByVal pSacl As Long, _
pSecurityDescriptor As Long) As Long

Private Declare Function SetNamedSecurityInfo Lib "Advapi32.dll" Alias _
"SetNamedSecurityInfoA" _
(ByVal ObjName As String, _
ByVal SE_OBJECT As Long, _
ByVal SecInfo As Long, _
ByVal pSid As Long, _
ByVal pSidGroup As Long, _
ByVal pDacl As Long, _
ByVal pSacl As Long) As Long

Private Declare Function LocalFree Lib "kernel32" (ByVal hMem As Long) As
Long

Private Sub Command1_Click()
Stop
Dim result As Long
Dim pSecDesc As Long
Dim ea As EXPLICIT_ACCESS
Dim pNewDACL As Long
Dim pOldDACL As Long

' Get the DACL information of c: est1 folder using GetNamedSecurityInfo()
API.
' SE_FILE_OBJECT constant says that the named securable object is a file or
folder
result = GetNamedSecurityInfo("H:Documents and SettingsAll
UsersApplication DataMyApp", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION,
0&, 0&, pOldDACL, 0&, pSecDesc)
If result = ERROR_SUCCESS Then

' Construct an EXPLICIT_ACCESS structure for Everyone with GENERIC_READ
access that will apply for c: est1
' as well as subfolder and files using BuildExplicitAccessWithName() API
BuildExplicitAccessWithName ea, "Пользователи", GENERIC_ALL,
GRANT_ACCESS, CONTAINER_INHERIT_ACE Or OBJECT_INHERIT_ACE

' Merge constructed EXPLICIT_ACCESS structure to the existing DACL and
get an updated DACL in memory from
' SetEntriesInAcl() API
result = SetEntriesInAcl(1, ea, pOldDACL, pNewDACL)
If result = ERROR_SUCCESS Then
MsgBox "SetEntriesInAcl succeeded"

' Call SetNamedSecurityInfo() API with the updated DACL in memory to
change the DACL of c: est1 folder
result = SetNamedSecurityInfo("H:Documents and SettingsAll
UsersApplication DataMyApp", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION,
0&, 0&, pNewDACL, 0&)
If result = ERROR_SUCCESS Then
MsgBox "SetNamedSecurityInfo succeeded"
Else
MsgBox "SetNamedSecurityInfo failed with error code : " & result
End If

' Free the memory allocated for the new DACL by the
SetEntriesInAcl() API, using LocalFree() API
LocalFree pNewDACL
Else
MsgBox "SetEntriesInAcl failed with error code : " & result
End If

' Free the memory allocated for the security descriptor by the
GetNamedSecurityInfo() API, using LocalFree() API
LocalFree pSecDesc
Else
MsgBox "GetNamedSecurityInfo failed with error code : " & result
End If
End Sub
=========The end of the citation================
Взято из http://support.microsoft.com/default.aspx?scid=kb;EN-US;295004
Если интересно, посмотри ещё
http://groups.google.com/groups?selm=2107d358.b941080c%40usw-ex0103-023.remarq.com&output=gplain

Кстати, сходите по указанным в последним строках ссылках.
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (статус: 7-ой класс)
Отправлен: 20.11.2005, 14:44


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.basicvba
Архив рассылки
Отписаться
Вспомнить пароль

В избранное