Вопрос № 29731: Уважаемые эксперты! Как узнать путь к папке винды и к системной папке? Можно этии пути узнать для другого компьютера, включенного в локальную сеть?
..Вопрос № 29737: Уважаемые эксперты! Можно защитить папку с файлами от удаления (и изменения желательно) паролем средствами NTFS? Но так, чтобы их могла удалить моя спецпрограмма. Или можно сделать это только с помощью левой проги? Вообщем, мне надо, чтобы, юзер не м...
Вопрос № 29.731
Уважаемые эксперты! Как узнать путь к папке винды и к системной папке? Можно этии пути узнать для другого компьютера, включенного в локальную сеть?
Отвечает: 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
--------- Учиться никогда не поздно. Особенно программированию!
Уважаемые эксперты! Можно защитить папку с файлами от удаления (и изменения желательно) паролем средствами NTFS? Но так, чтобы их могла удалить моя спецпрограмма. Или можно сделать это только с помощью левой проги? Вообщем, мне надо, чтобы, юзер не мог удалить данные проги обычным способом удаления файлов, а файлы можно было удалить спецпрогой. Ну и надо при попытке удаления выдавать определённое мной сообщение - значит одними возможностями NTFS не обойтись, или можно? Может, где можно почитать про это?
Отвечает: Мухамедзянов Геннадий
Здравствуйте, Александр А.А.!
Если я правильно понял вопрос, то вам надо закрыть папку пользователю для удаления и изменения. Так в свойствах папки, если пользователь локальный и не имеет прав локального администратора можно выставить права доступа к папке именно для определенного пользователя. Для этого щелкаем на папке которую нужно закрыть правой кнопкой мыши, и выбираем свойства папки, далее в горизонтальных вкладках, Безопасность. В этой вкладке можно выставить все свойства, например добавив пользователя(причем этот пользователь реально
существует на компьютере) и дать ему права только на чтение...
--------- Это очень интересно... надо разобраться!!!
Ответ отправил: Мухамедзянов Геннадий (статус: 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 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
Кстати, сходите по указанным в последним строках ссылках.
--------- Учиться никогда не поздно. Особенно программированию!