windows-pr 0.6.6 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +7 -0
- data/MANIFEST +1 -0
- data/lib/windows/clipboard.rb +17 -52
- data/lib/windows/com.rb +54 -0
- data/lib/windows/console.rb +62 -281
- data/lib/windows/debug.rb +36 -0
- data/lib/windows/device_io.rb +9 -7
- data/lib/windows/directory.rb +20 -75
- data/lib/windows/error.rb +51 -36
- data/lib/windows/eventlog.rb +20 -101
- data/lib/windows/file.rb +59 -295
- data/lib/windows/file_mapping.rb +14 -32
- data/lib/windows/filesystem.rb +8 -10
- data/lib/windows/handle.rb +15 -11
- data/lib/windows/library.rb +21 -63
- data/lib/windows/memory.rb +28 -106
- data/lib/windows/msvcrt/buffer.rb +20 -15
- data/lib/windows/msvcrt/file.rb +38 -7
- data/lib/windows/msvcrt/io.rb +180 -80
- data/lib/windows/msvcrt/string.rb +20 -15
- data/lib/windows/national.rb +16 -39
- data/lib/windows/network_management.rb +93 -92
- data/lib/windows/nio.rb +26 -0
- data/lib/windows/path.rb +68 -349
- data/lib/windows/pipe.rb +18 -56
- data/lib/windows/process.rb +28 -110
- data/lib/windows/registry.rb +27 -142
- data/lib/windows/security.rb +34 -142
- data/lib/windows/service.rb +34 -80
- data/lib/windows/shell.rb +10 -16
- data/lib/windows/sound.rb +17 -31
- data/lib/windows/synchronize.rb +24 -90
- data/lib/windows/system_info.rb +16 -47
- data/lib/windows/unicode.rb +21 -41
- data/lib/windows/volume.rb +23 -83
- data/lib/windows/window.rb +11 -17
- data/windows-pr.gemspec +3 -2
- metadata +17 -5
data/lib/windows/file_mapping.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
-
require '
|
1
|
+
require 'windows/api'
|
2
|
+
include Windows
|
2
3
|
|
3
4
|
module Windows
|
4
5
|
module FileMapping
|
6
|
+
API.auto_namespace = 'Windows::FileMapping'
|
7
|
+
API.auto_constant = true
|
8
|
+
API.auto_method = true
|
9
|
+
API.auto_unicode = true
|
10
|
+
|
5
11
|
FILE_MAP_COPY = 0x0001
|
6
12
|
FILE_MAP_WRITE = 0x0002
|
7
13
|
FILE_MAP_READ = 0x0004
|
@@ -25,35 +31,11 @@ module Windows
|
|
25
31
|
SEC_COMMIT = 0x8000000
|
26
32
|
SEC_NOCACHE = 0x10000000
|
27
33
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
def CreateFileMapping(handle, security, protect, high, low, name)
|
36
|
-
CreateFileMapping.call(handle, security, protect, high, low, name)
|
37
|
-
end
|
38
|
-
|
39
|
-
def FlushViewOfFile(address, bytes)
|
40
|
-
FlushViewOfFile.call(address, bytes) != 0
|
41
|
-
end
|
42
|
-
|
43
|
-
def MapViewOfFile(handle, access, high, low, bytes)
|
44
|
-
MapViewOfFile.call(handle, access, high, low, bytes)
|
45
|
-
end
|
46
|
-
|
47
|
-
def MapViewOfFileEx(handle, access, high, low, bytes, address)
|
48
|
-
MapViewOfFileEx.call(handle, access, high, low, bytes, address)
|
49
|
-
end
|
50
|
-
|
51
|
-
def OpenFileMapping(access, inherit, name)
|
52
|
-
OpenFileMapping.call(access, inherit, name)
|
53
|
-
end
|
54
|
-
|
55
|
-
def UnmapViewOfFile(address)
|
56
|
-
UnmapViewOfFile.call(address) != 0
|
57
|
-
end
|
34
|
+
API.new('CreateFileMapping', 'LPLLLP', 'L')
|
35
|
+
API.new('FlushViewOfFile', 'PL', 'B')
|
36
|
+
API.new('MapViewOfFile', 'LLLLL', 'L')
|
37
|
+
API.new('MapViewOfFileEx', 'LLLLLL', 'L')
|
38
|
+
API.new('OpenFileMapping', 'LIP', 'L')
|
39
|
+
API.new('UnmapViewOfFile', 'P', 'B')
|
58
40
|
end
|
59
|
-
end
|
41
|
+
end
|
data/lib/windows/filesystem.rb
CHANGED
@@ -1,16 +1,14 @@
|
|
1
|
-
require '
|
1
|
+
require 'windows/api'
|
2
|
+
include Windows
|
2
3
|
|
3
4
|
module Windows
|
4
5
|
module FileSystem
|
5
|
-
|
6
|
-
|
6
|
+
API.auto_namespace = 'Windows::FileSystem'
|
7
|
+
API.auto_constant = true
|
8
|
+
API.auto_method = true
|
9
|
+
API.auto_unicode = true
|
7
10
|
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
def GetDiskFreeSpaceEx(path, free_bytes, total_bytes, total_free)
|
13
|
-
GetDiskFreeSpaceEx.call(path, free_bytes, total_bytes, total_free) > 0
|
14
|
-
end
|
11
|
+
API.new('GetDiskFreeSpace', 'PPPPP', 'B')
|
12
|
+
API.new('GetDiskFreeSpaceEx', 'PPPP', 'B')
|
15
13
|
end
|
16
14
|
end
|
data/lib/windows/handle.rb
CHANGED
@@ -1,19 +1,23 @@
|
|
1
|
-
require '
|
1
|
+
require 'windows/api'
|
2
|
+
include Windows
|
2
3
|
|
3
4
|
module Windows
|
4
5
|
module Handle
|
5
|
-
|
6
|
-
|
6
|
+
API.auto_namespace = 'Windows::Handle'
|
7
|
+
API.auto_constant = false # Due to some functions with leading '_'.
|
8
|
+
API.auto_method = false
|
9
|
+
API.auto_unicode = false
|
10
|
+
|
11
|
+
INVALID_HANDLE_VALUE = -1
|
7
12
|
HANDLE_FLAG_INHERIT = 0x00000001
|
8
13
|
HANDLE_FLAG_PROTECT_FROM_CLOSE = 0x00000002
|
9
14
|
|
10
|
-
CloseHandle =
|
11
|
-
DuplicateHandle =
|
12
|
-
GetHandleInformation =
|
13
|
-
SetHandleInformation =
|
14
|
-
|
15
|
-
|
16
|
-
OpenOSFHandle = Win32API.new('msvcrt', '_open_osfhandle', 'LI', 'I')
|
15
|
+
CloseHandle = API.new('CloseHandle', 'L', 'I')
|
16
|
+
DuplicateHandle = API.new('DuplicateHandle', 'LLLLLIL', 'I')
|
17
|
+
GetHandleInformation = API.new('GetHandleInformation', 'LL', 'I')
|
18
|
+
SetHandleInformation = API.new('SetHandleInformation', 'LLL', 'I')
|
19
|
+
GetOSFHandle = API.new('_get_osfhandle', 'I', 'L', 'msvcrt')
|
20
|
+
OpenOSFHandle = API.new('_open_osfhandle', 'LI', 'I', 'msvcrt')
|
17
21
|
|
18
22
|
def CloseHandle(handle)
|
19
23
|
CloseHandle.call(handle) != 0
|
@@ -39,4 +43,4 @@ module Windows
|
|
39
43
|
OpenOSFHandle.call(handle, flags)
|
40
44
|
end
|
41
45
|
end
|
42
|
-
end
|
46
|
+
end
|
data/lib/windows/library.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
-
require '
|
1
|
+
require 'windows/api'
|
2
|
+
include Windows
|
2
3
|
|
3
4
|
module Windows
|
4
5
|
module Library
|
6
|
+
API.auto_namespace = 'Windows::Library'
|
7
|
+
API.auto_constant = true
|
8
|
+
API.auto_method = true
|
9
|
+
API.auto_unicode = true
|
10
|
+
|
5
11
|
DLL_PROCESS_DETACH = 0
|
6
12
|
DLL_PROCESS_ATTACH = 1
|
7
13
|
DLL_THREAD_ATTACH = 2
|
@@ -16,72 +22,24 @@ module Windows
|
|
16
22
|
LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008
|
17
23
|
LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010
|
18
24
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
API.new('DisableThreadLibraryCalls', 'L', 'B')
|
26
|
+
API.new('FreeLibrary', 'L', 'B')
|
27
|
+
API.new('FreeLibraryAndExitThread', 'LL', 'V')
|
28
|
+
API.new('GetModuleFileName', 'LPL', 'L')
|
29
|
+
API.new('GetModuleHandle', 'P', 'L')
|
30
|
+
API.new('GetProcAddress', 'LP', 'L')
|
31
|
+
API.new('LoadLibrary', 'P', 'L')
|
32
|
+
API.new('LoadLibraryEx', 'PLL', 'L')
|
33
|
+
API.new('LoadModule', 'PP', 'L')
|
34
|
+
|
29
35
|
# Windows XP or later
|
30
36
|
begin
|
31
|
-
|
32
|
-
|
33
|
-
|
37
|
+
API.new('GetDllDirectory', 'LP', 'L')
|
38
|
+
API.new('GetModuleHandleEx', 'LPP', 'I')
|
39
|
+
API.new('SetDllDirectory', 'P', 'I')
|
34
40
|
rescue Exception
|
35
41
|
# Do nothing - not supported on current platform. It's up to you to
|
36
42
|
# check for the existence of the constant in your code.
|
37
43
|
end
|
38
|
-
|
39
|
-
def DisableThreadLibraryCalls(hmodule)
|
40
|
-
DisableThreadLibraryCalls.call(hmodule) != 0
|
41
|
-
end
|
42
|
-
|
43
|
-
def FreeLibrary(hmodule)
|
44
|
-
FreeLibrary.call(hmodule) != 0
|
45
|
-
end
|
46
|
-
|
47
|
-
def GetModuleFileName(hmodule, file, size)
|
48
|
-
GetModuleFileName.call(hmodule, file, size)
|
49
|
-
end
|
50
|
-
|
51
|
-
def GetModuleHandle(module_name)
|
52
|
-
GetModuleHandle.call(module_name)
|
53
|
-
end
|
54
|
-
|
55
|
-
def GetProcAddress(hmodule, proc_name)
|
56
|
-
GetProcAddress.call(hmodule, proc_name)
|
57
|
-
end
|
58
|
-
|
59
|
-
def LoadLibrary(library)
|
60
|
-
LoadLibrary.call(library)
|
61
|
-
end
|
62
|
-
|
63
|
-
def LoadLibraryEx(library, file, flags)
|
64
|
-
LoadLibraryEx.call(library, file, flags)
|
65
|
-
end
|
66
|
-
|
67
|
-
def LoadModule(hmodule, param_block)
|
68
|
-
LoadModule.call(hmodule, param_block)
|
69
|
-
end
|
70
|
-
|
71
|
-
begin
|
72
|
-
def SetDllDirectory(path)
|
73
|
-
SetDllDirectory.call(path)
|
74
|
-
end
|
75
|
-
|
76
|
-
def GetModuleHandleEx(flags, module_name, hmodule)
|
77
|
-
GetModuleHandleEx.call(flags, module_name, hmodule)
|
78
|
-
end
|
79
|
-
|
80
|
-
def GetDllDirectory(length, buffer)
|
81
|
-
GetDllDirectory.call(length, buffer)
|
82
|
-
end
|
83
|
-
rescue Exception
|
84
|
-
# Windows XP or later
|
85
|
-
end
|
86
44
|
end
|
87
|
-
end
|
45
|
+
end
|
data/lib/windows/memory.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
-
require '
|
1
|
+
require 'windows/api'
|
2
|
+
include Windows
|
2
3
|
|
3
4
|
module Windows
|
4
5
|
module Memory
|
6
|
+
API.auto_namespace = 'Windows::Memory'
|
7
|
+
API.auto_constant = true
|
8
|
+
API.auto_method = true
|
9
|
+
API.auto_unicode = false
|
10
|
+
|
5
11
|
GHND = 0x0042
|
6
12
|
GMEM_FIXED = 0x0000
|
7
13
|
GMEM_MOVABLE = 0002
|
@@ -16,110 +22,26 @@ module Windows
|
|
16
22
|
MEM_TOP_DOWN = 0x100000
|
17
23
|
MEM_WRITE_WATCH = 0x200000
|
18
24
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
def GlobalAlloc(flags, bytes)
|
42
|
-
GlobalAlloc.call(flags, bytes)
|
43
|
-
end
|
44
|
-
|
45
|
-
def GlobalFlags(handle)
|
46
|
-
GlobalFlags.call(handle)
|
47
|
-
end
|
48
|
-
|
49
|
-
def GlobalFree(handle)
|
50
|
-
GlobalFree.call(handle)
|
51
|
-
end
|
52
|
-
|
53
|
-
def GlobalHandle(handle)
|
54
|
-
GlobalHandle.call(handle)
|
55
|
-
end
|
56
|
-
|
57
|
-
def GlobalLock(handle)
|
58
|
-
GlobalLock.call(handle)
|
59
|
-
end
|
60
|
-
|
61
|
-
def GlobalMemoryStatus(buf)
|
62
|
-
GlobalMemoryStatus.call(buf)
|
63
|
-
end
|
64
|
-
|
65
|
-
def GlobalMemoryStatusEx(buf)
|
66
|
-
GlobalMemoryStatusEx.call(buf)
|
67
|
-
end
|
68
|
-
|
69
|
-
def GlobalReAlloc(handle, bytes, flags)
|
70
|
-
GlobalReAlloc.call(handle, bytes, flags)
|
71
|
-
end
|
72
|
-
|
73
|
-
def GlobalSize(handle)
|
74
|
-
GlobalSize.call(handle)
|
75
|
-
end
|
76
|
-
|
77
|
-
def GlobalUnlock(handle)
|
78
|
-
GlobalUnlock.call(handle)
|
79
|
-
end
|
80
|
-
|
81
|
-
def VirtualAlloc(address, size, alloc_type, protect)
|
82
|
-
VirtualAlloc.call(address, size, alloc_type, protect)
|
83
|
-
end
|
84
|
-
|
85
|
-
def VirtualAllocEx(handle, address, size, alloc_type, protect)
|
86
|
-
VirtualAllocEx.call(handle, address, size, alloc_type, protect)
|
87
|
-
end
|
88
|
-
|
89
|
-
def VirtualFree(address, size, free_type)
|
90
|
-
VirtualFree.call(address, size, free_type) != 0
|
91
|
-
end
|
92
|
-
|
93
|
-
def VirtualFreeEx(handle, address, size, free_type)
|
94
|
-
VirtualFreeEx.call(handle, address, size, free_type) != 0
|
95
|
-
end
|
96
|
-
|
97
|
-
def VirtualLock(address, size)
|
98
|
-
VirtualLock.call(address, size) != 0
|
99
|
-
end
|
100
|
-
|
101
|
-
def VirtualProtect(address, size, new_protect, old_protect)
|
102
|
-
VirtualProtect.call(address, size, new_protect, old_protect) != 0
|
103
|
-
end
|
104
|
-
|
105
|
-
def VirtualProtectEx(handle, address, size, new_protect, old_protect)
|
106
|
-
VirtualProtectEx.call(handle, address, size, new_protect, old_protect) != 0
|
107
|
-
end
|
108
|
-
|
109
|
-
def VirtualQuery(address, buffer, length)
|
110
|
-
VirtualQuery.call(address, buffer, length)
|
111
|
-
end
|
112
|
-
|
113
|
-
def VirtualQueryEx(handle, address, buffer, length)
|
114
|
-
VirtualQueryEx.call(handle, address, buffer, length)
|
115
|
-
end
|
116
|
-
|
117
|
-
def VirtualUnlock(address, size)
|
118
|
-
VirtualUnlock.call(address, size) != 0
|
119
|
-
end
|
120
|
-
|
121
|
-
def ZeroMemory(dest, length)
|
122
|
-
ZeroMemory.call(dest, length)
|
123
|
-
end
|
25
|
+
API.new('GlobalAlloc', 'II', 'I')
|
26
|
+
API.new('GlobalFlags', 'I', 'I')
|
27
|
+
API.new('GlobalFree', 'I', 'I')
|
28
|
+
API.new('GlobalHandle', 'P', 'I')
|
29
|
+
API.new('GlobalLock', 'L', 'L')
|
30
|
+
API.new('GlobalMemoryStatus', 'P', 'V')
|
31
|
+
API.new('GlobalMemoryStatusEx', 'P', 'V')
|
32
|
+
API.new('GlobalReAlloc', 'III', 'I')
|
33
|
+
API.new('GlobalSize', 'I', 'I')
|
34
|
+
API.new('GlobalUnlock', 'I', 'I')
|
35
|
+
API.new('VirtualAlloc', 'LLLL', 'P')
|
36
|
+
API.new('VirtualAllocEx', 'LLLLL', 'P')
|
37
|
+
API.new('VirtualFree', 'LLL', 'B')
|
38
|
+
API.new('VirtualFreeEx', 'LLLL', 'B')
|
39
|
+
API.new('VirtualLock', 'PL', 'B')
|
40
|
+
API.new('VirtualProtect', 'PLLP', 'B')
|
41
|
+
API.new('VirtualProtectEx', 'LPLLP', 'B')
|
42
|
+
API.new('VirtualQuery', 'LPL', 'L')
|
43
|
+
API.new('VirtualQueryEx', 'LLPL', 'L')
|
44
|
+
API.new('VirtualUnlock', 'PL', 'B')
|
45
|
+
API.new('RtlZeroMemory', 'PL', 'L')
|
124
46
|
end
|
125
47
|
end
|
@@ -1,22 +1,27 @@
|
|
1
|
-
require '
|
1
|
+
require 'windows/api'
|
2
|
+
include Windows
|
2
3
|
|
3
4
|
module Windows
|
4
5
|
module MSVCRT
|
5
6
|
module Buffer
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
API.auto_constant = false
|
8
|
+
API.auto_method = false
|
9
|
+
API.auto_unicode = false
|
10
|
+
|
11
|
+
Memcpy = API.new('memcpy', 'PLL', 'P', 'msvcrt')
|
12
|
+
Memccpy = API.new('_memccpy', 'PPIL', 'P', 'msvcrt')
|
13
|
+
Memchr = API.new('memchr', 'PIL', 'P', 'msvcrt')
|
14
|
+
Memcmp = API.new('memcmp', 'PPL', 'I', 'msvcrt')
|
15
|
+
Memicmp = API.new('_memicmp', 'PPL', 'I', 'msvcrt')
|
16
|
+
Memmove = API.new('memmove', 'PPL', 'P', 'msvcrt')
|
17
|
+
Memset = API.new('memset', 'PLL', 'L', 'msvcrt')
|
18
|
+
Swab = API.new('_swab', 'PPI', 'V', 'msvcrt')
|
19
|
+
|
20
|
+
MemcpyPLL = API.new('memcpy', 'PLL', 'P', 'msvcrt')
|
21
|
+
MemcpyLPL = API.new('memcpy', 'LPL', 'P', 'msvcrt')
|
22
|
+
MemcpyLLL = API.new('memcpy', 'LLL', 'P', 'msvcrt')
|
23
|
+
MemcpyPPL = API.new('memcpy', 'PPL', 'P', 'msvcrt')
|
14
24
|
|
15
|
-
MemcpyPLL = Win32API.new('msvcrt', 'memcpy', 'PLL', 'P')
|
16
|
-
MemcpyLPL = Win32API.new('msvcrt', 'memcpy', 'LPL', 'P')
|
17
|
-
MemcpyLLL = Win32API.new('msvcrt', 'memcpy', 'LLL', 'P')
|
18
|
-
MemcpyPPL = Win32API.new('msvcrt', 'memcpy', 'PPL', 'P')
|
19
|
-
|
20
25
|
# Wrapper for the memcpy() function. Both the +dest+ and +src+ can
|
21
26
|
# be either a string or a memory address. If +size+ is omitted, it
|
22
27
|
# defaults to the length of +src+.
|
@@ -66,4 +71,4 @@ module Windows
|
|
66
71
|
end
|
67
72
|
end
|
68
73
|
end
|
69
|
-
end
|
74
|
+
end
|
data/lib/windows/msvcrt/file.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
|
-
require '
|
1
|
+
require 'windows/api'
|
2
|
+
include Windows
|
2
3
|
|
3
4
|
module Windows
|
4
5
|
module MSVCRT
|
5
6
|
module File
|
7
|
+
API.auto_method = false
|
8
|
+
API.auto_constant = false
|
9
|
+
API.auto_unicode = false
|
10
|
+
|
6
11
|
S_IFMT = 0170000 # file type mask
|
7
12
|
S_IFDIR = 0040000 # directory
|
8
13
|
S_IFCHR = 0020000 # character special
|
@@ -12,10 +17,28 @@ module Windows
|
|
12
17
|
S_IWRITE = 0000200 # write permission, owner
|
13
18
|
S_IEXEC = 0000100 # execute/search permission, owner
|
14
19
|
|
15
|
-
|
16
|
-
|
17
|
-
Stat64 =
|
18
|
-
|
20
|
+
Mktemp = API.new('_mktemp', 'P', 'P', 'msvcrt')
|
21
|
+
Stat = API.new('_stat', 'PP', 'I', 'msvcrt')
|
22
|
+
Stat64 = API.new('_stat64', 'PP', 'I', 'msvcrt')
|
23
|
+
Wmktemp = API.new('_wmktemp', 'P', 'P', 'msvcrt')
|
24
|
+
Wstat = API.new('_wstat', 'PP', 'I', 'msvcrt')
|
25
|
+
Wstat64 = API.new('_wstat64', 'PP', 'I', 'msvcrt')
|
26
|
+
|
27
|
+
# VC++ 8.0 or later
|
28
|
+
begin
|
29
|
+
Mktemp_s = API.new('_mktemp_s', 'PL', 'L', 'msvcrt')
|
30
|
+
Wmktemp_s = API.new('_wmktemp_s', 'PL', 'L', 'msvcrt')
|
31
|
+
rescue RuntimeError
|
32
|
+
# Ignore - you must check for it via 'defined?'
|
33
|
+
end
|
34
|
+
|
35
|
+
def mktemp(template)
|
36
|
+
Mktemp.call(template)
|
37
|
+
end
|
38
|
+
|
39
|
+
def mktemp_s(template, size)
|
40
|
+
Mktemp_s.call(template, size)
|
41
|
+
end
|
19
42
|
|
20
43
|
def stat(path, buffer)
|
21
44
|
Stat.call(path, buffer)
|
@@ -24,7 +47,15 @@ module Windows
|
|
24
47
|
def stat64(path, buffer)
|
25
48
|
Stat64.call(path, buffer)
|
26
49
|
end
|
27
|
-
|
50
|
+
|
51
|
+
def wmktemp(template)
|
52
|
+
Wmktemp.call(template)
|
53
|
+
end
|
54
|
+
|
55
|
+
def wmktemp_s(template, size)
|
56
|
+
Wmktemp_s.call(template, size)
|
57
|
+
end
|
58
|
+
|
28
59
|
def wstat(path, buffer)
|
29
60
|
Wstat.call(path, buffer)
|
30
61
|
end
|
@@ -34,4 +65,4 @@ module Windows
|
|
34
65
|
end
|
35
66
|
end
|
36
67
|
end
|
37
|
-
end
|
68
|
+
end
|