Вход | Регистрация

Информационные технологии ::

Метки: 

Жесткие связи (Hard links) - пишу специально для всех посетителей форума...

Ø [Волшебник, 31.05.04 - 22:10]
Я
   Demiurg
 
31.05.04 - 20:28
Жесткие связи (Hard links)

Суть жестких связей заключается в том, что для одного и того же файла можно создать несколько разных имен внутри одного тома. Причем каждое из этих имен указывает на один и тот же физический файл. Удаляя файл, к которому создано несколько жестких связей, Вы физически не удаляете его с диска – он продолжает существовать! И существовать он будет до тех пор, пока Вы не удалите последнюю жесткую связь. Как это осуществляется? При создании жесткой связи с файлом система находит этот файл в MFT и добавляет новый атрибут имени. Одновременно с этим атрибут счетчика жестких связей увеличивается на 1. При удалении файла (из Explorer или из командной строки) удаляется соответствующий атрибут имени, а счетчик жестких связей уменьшается на 1. Таким образом, файл существует на диске до тех пор, пока счетчик жестких связей больше 0.

В Windows 2000 нет встроенных средств создания жестких связей. Для реализации этой функциональности можно воспользоваться функцией CreateHardLink. Предлагаемая программа HLINKS позволяет создавать жесткие связи и имеет графический интерфейс. Эта программа создает жесткие связи не изменяя списка контроля доступа к файлу, однако при желании его легко модифицировать. В случае создания жесткой связи выводится сообщение об успехе. Если же жесткую связь создать невозможно (например, Вы выбрали раздел с FAT), то выводится сообщение об ошибке. Программа написана на Visual Basic 6.0:

Файл HLINK.BAS
*******************

Public Type SECURITY_ATTRIBUTES
   nLength As Long
   lpSecurityDescriptor As Long
   bInheritHandle As Long
End Type
Public Declare Function CreateHardLink Lib "kernel32" Alias "CreateHardLinkA" (pszFileName As String, pszExistingFileName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Boolean
Файл HLINK.FRM
*******************

VERSION 5.00
Begin VB.Form Form1
  Caption         =   "Hard Links"
  ClientHeight    =   3780
  ClientLeft      =   60
  ClientTop       =   345
  ClientWidth     =   7245
  LinkTopic       =   "Form1"
  ScaleHeight     =   3780
  ScaleWidth      =   7245
  StartUpPosition =   3  'Windows Default
  Begin VB.CommandButton Command2
     Cancel          =   -1  'True
     Caption         =   "E&xit"
     Height          =   375
     Left            =   5760
     TabIndex        =   10
     Top             =   120
     Width           =   1335
  End
  Begin VB.Frame Frame2
     Caption         =   "New Link"
     Height          =   3255
     Left            =   3720
     TabIndex        =   3
     Top             =   480
     Width           =   3255
     Begin VB.CommandButton Command1
        Caption         =   "&Create"
        Default         =   -1  'True
        Height          =   375
        Left            =   960
        TabIndex        =   9
        Top             =   2760
        Width           =   1575
     End
     Begin VB.TextBox txtName
        Height          =   285
        Left            =   120
        TabIndex        =   7
        Top             =   2280
        Width           =   3015
     End
     Begin VB.DirListBox Dir2
        Height          =   1665
        Left            =   120
        TabIndex        =   6
        Top             =   240
        Width           =   3015
     End
     Begin VB.Label Label2
        Caption         =   "Enter hard link name:"
        Height          =   255
        Left            =   120
        TabIndex        =   8
        Top             =   2040
        Width           =   2535
     End
  End
  Begin VB.Frame Frame1
     Caption         =   "Existing File"
     Height          =   3255
     Left            =   120
     TabIndex        =   2
     Top             =   480
     Width           =   3375
     Begin VB.FileListBox File1
        Height          =   1260
        Left            =   120
        TabIndex        =   5
        Top             =   1800
        Width           =   3135
     End
     Begin VB.DirListBox Dir1
        Height          =   1440
        Left            =   120
        TabIndex        =   4
        Top             =   240
        Width           =   3135
     End
  End
  Begin VB.DriveListBox Drive1
     Height          =   315
     Left            =   1440
     TabIndex        =   0
     Top             =   120
     Width           =   1935
  End
  Begin VB.Label Label1
     Caption         =   "Volume Name:"
     Height          =   255
     Left            =   120
     TabIndex        =   1
     Top             =   120
     Width           =   1215
  End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
   Dim V As SECURITY_ATTRIBUTES
   Dim sOriginFile As String
   Dim sLinkName As String
   If
   txtName.Text <>  "" Then
       If
       File1.ListIndex > = 0 Then
           sOriginFile = Dir1.Path & "\" & File1.FileName
           sLinkName = Dir2.Path & "\" & txtName.Text
           If CreateHardLink(ByVal sLinkName, ByVal sOriginFile, V) Then
               MsgBox "Created"
           Else
               MsgBox "Error"
           End If
       Else
           MsgBox "Select Original File"
       End If
   Else
       MsgBox "You need to enter HardLink Name"
   
   End If
End Sub

Private Sub Command2_Click()
   End
End Sub

Private Sub Dir1_Change()
   File1.Path = Dir1.Path
End Sub

Private Sub Drive1_Change()
   Dir1.Path = Drive1.Drive
   Dir2.Path = Drive1.Drive
End Sub

---
p.s. думаю, для тех, кто иногда думает, я дал пищу для размышлений :)))
 
 
   Demiurg
 
1 - 31.05.04 - 20:30
HLINKS.VBP
------------
Type=Exe
Form=hlinks.frm
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#D:\WINNT\system32\stdole2.tlb#OLE Automation
Module=Module1; hlinks.bas
Startup="Form1"
ExeName32="hlinks.exe"
Command32=""
Name="Project1"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="Microsoft ZAO"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1

[MS Transaction Server]
AutoRefresh=1
   Demiurg
 
2 - 31.05.04 - 20:32
программу можно скачать здесь

http://www.gilev.ru/hlinks.exe


Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует