filewatch-ext 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/filewatch/winhelper.rb +70 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c127fe565521b1ad5ba50a16e40c71a4015d88df
|
4
|
+
data.tar.gz: be06a7949b5703482a4f688012f9961b55d8c4f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7296c2ccd444d5948905187d147558e72ca4417af5154bc6a83e81ebad790bd50d53b0d5a3ec4b04392a34f1c0e5a9f796400673296a0dee8cbcb31680168dad
|
7
|
+
data.tar.gz: a4b05606dcef7d3a452fcdeb40e34236d02bb7f117c91c294b43e1ca5f00b18bfb2972e046aaf10d76f357e3ccdbf3d9a8b5396481f156ea3cc9efc14b29709c
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require "ffi"
|
2
|
+
|
3
|
+
module Winhelper
|
4
|
+
extend FFI::Library
|
5
|
+
|
6
|
+
ffi_lib 'kernel32'
|
7
|
+
ffi_convention :stdcall
|
8
|
+
class FileTime < FFI::Struct
|
9
|
+
layout :lowDateTime, :uint,
|
10
|
+
:highDateTime, :uint
|
11
|
+
end
|
12
|
+
|
13
|
+
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa363788(v=vs.85).aspx
|
14
|
+
class FileInformation < FFI::Struct
|
15
|
+
def initialize()
|
16
|
+
createTime = FileTime.new
|
17
|
+
lastAccessTime = FileTime.new
|
18
|
+
lastWriteTime = FileTime.new
|
19
|
+
end
|
20
|
+
|
21
|
+
layout :fileAttributes, :uint, #DWORD dwFileAttributes;
|
22
|
+
:createTime, FileTime, #FILETIME ftCreationTime;
|
23
|
+
:lastAccessTime, FileTime, #FILETIME ftLastAccessTime;
|
24
|
+
:lastWriteTime, FileTime, #FILETIME ftLastWriteTime;
|
25
|
+
:volumeSerialNumber, :uint, #DWORD dwVolumeSerialNumber;
|
26
|
+
:fileSizeHigh, :uint, #DWORD nFileSizeHigh;
|
27
|
+
:fileSizeLow, :uint, #DWORD nFileSizeLow;
|
28
|
+
:numberOfLinks, :uint, #DWORD nNumberOfLinks;
|
29
|
+
:fileIndexHigh, :uint, #DWORD nFileIndexHigh;
|
30
|
+
:fileIndexLow, :uint #DWORD nFileIndexLow;
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
|
35
|
+
#HANDLE WINAPI CreateFile(_In_ LPCTSTR lpFileName,_In_ DWORD dwDesiredAccess,_In_ DWORD dwShareMode,
|
36
|
+
# _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,_In_ DWORD dwCreationDisposition,
|
37
|
+
# _In_ DWORD dwFlagsAndAttributes,_In_opt_ HANDLE hTemplateFile);
|
38
|
+
attach_function :GetOpenFileHandle, :CreateFileA, [:pointer, :uint, :uint, :pointer, :uint, :uint, :pointer], :pointer
|
39
|
+
|
40
|
+
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa364952(v=vs.85).aspx
|
41
|
+
#BOOL WINAPI GetFileInformationByHandle(_In_ HANDLE hFile,_Out_ LPBY_HANDLE_FILE_INFORMATION lpFileInformation);
|
42
|
+
attach_function :GetFileInformationByHandle, [:pointer, :pointer], :int
|
43
|
+
|
44
|
+
attach_function :CloseHandle, [:pointer], :int
|
45
|
+
|
46
|
+
|
47
|
+
def self.GetWindowsUniqueFileIdentifier(path)
|
48
|
+
handle = GetOpenFileHandle(path, 0, 7, nil, 3, 128, nil)
|
49
|
+
fileInfo = Winhelper::FileInformation.new
|
50
|
+
success = GetFileInformationByHandle(handle, fileInfo)
|
51
|
+
CloseHandle(handle)
|
52
|
+
if success == 1
|
53
|
+
#args = [
|
54
|
+
# fileInfo[:fileAttributes], fileInfo[:volumeSerialNumber], fileInfo[:fileSizeHigh], fileInfo[:fileSizeLow],
|
55
|
+
# fileInfo[:numberOfLinks], fileInfo[:fileIndexHigh], fileInfo[:fileIndexLow]
|
56
|
+
# ]
|
57
|
+
#p "Information: %u %u %u %u %u %u %u " % args
|
58
|
+
#this is only guaranteed on NTFS, for ReFS on windows 2012, GetFileInformationByHandleEx should be used with FILE_ID_INFO, which returns a 128 bit identifier
|
59
|
+
return "#{fileInfo[:volumeSerialNumber]}-#{fileInfo[:fileIndexLow]}-#{fileInfo[:fileIndexHigh]}"
|
60
|
+
else
|
61
|
+
#p "cannot retrieve file information, returning path"
|
62
|
+
return path;
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
#fileId = Winhelper.GetWindowsUniqueFileIdentifier('C:\inetpub\logs\LogFiles\W3SVC1\u_ex1fdsadfsadfasdf30612.log')
|
68
|
+
#p "FileId: " + fileId
|
69
|
+
#p "outside function, sleeping"
|
70
|
+
#sleep(10)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filewatch-ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dietmar Duft
|
@@ -74,6 +74,7 @@ extensions: []
|
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
76
|
- lib/JRubyFileExtension.jar
|
77
|
+
- lib/filewatch/winhelper.rb
|
77
78
|
- lib/filewatch/ext/tailbase.rb
|
78
79
|
- lib/filewatch/ext/filetail.rb
|
79
80
|
- lib/filewatch/ext/xlsxtail.rb
|