windows-pr 1.1.2 → 1.1.3

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.
Files changed (115) hide show
  1. data/CHANGES +408 -404
  2. data/MANIFEST +65 -65
  3. data/README +149 -149
  4. data/Rakefile +52 -52
  5. data/doc/conversion_guide.txt +37 -37
  6. data/lib/windows/clipboard.rb +59 -59
  7. data/lib/windows/com.rb +190 -189
  8. data/lib/windows/com/automation.rb +147 -147
  9. data/lib/windows/com/variant.rb +22 -22
  10. data/lib/windows/console.rb +112 -112
  11. data/lib/windows/debug.rb +33 -33
  12. data/lib/windows/device_io.rb +246 -246
  13. data/lib/windows/directory.rb +25 -25
  14. data/lib/windows/error.rb +482 -482
  15. data/lib/windows/eventlog.rb +78 -78
  16. data/lib/windows/file.rb +262 -262
  17. data/lib/windows/file_mapping.rb +23 -23
  18. data/lib/windows/filesystem.rb +13 -13
  19. data/lib/windows/gdi/bitmap.rb +63 -63
  20. data/lib/windows/gdi/device_context.rb +44 -44
  21. data/lib/windows/gdi/metafile.rb +38 -38
  22. data/lib/windows/gdi/painting_drawing.rb +113 -113
  23. data/lib/windows/handle.rb +21 -21
  24. data/lib/windows/library.rb +42 -42
  25. data/lib/windows/limits.rb +31 -31
  26. data/lib/windows/mailslot.rb +22 -22
  27. data/lib/windows/memory.rb +126 -126
  28. data/lib/windows/msvcrt/buffer.rb +73 -73
  29. data/lib/windows/msvcrt/directory.rb +29 -29
  30. data/lib/windows/msvcrt/file.rb +45 -45
  31. data/lib/windows/msvcrt/io.rb +71 -71
  32. data/lib/windows/msvcrt/time.rb +167 -167
  33. data/lib/windows/national.rb +578 -578
  34. data/lib/windows/network/management.rb +523 -523
  35. data/lib/windows/network/snmp.rb +90 -90
  36. data/lib/windows/network/winsock.rb +126 -126
  37. data/lib/windows/nio.rb +48 -47
  38. data/lib/windows/ntfs/winternl.rb +96 -96
  39. data/lib/windows/path.rb +141 -141
  40. data/lib/windows/pipe.rb +40 -40
  41. data/lib/windows/process.rb +174 -174
  42. data/lib/windows/registry.rb +126 -126
  43. data/lib/windows/security.rb +477 -477
  44. data/lib/windows/security/authentication.rb +30 -30
  45. data/lib/windows/service.rb +140 -140
  46. data/lib/windows/shell.rb +169 -169
  47. data/lib/windows/sound.rb +37 -37
  48. data/lib/windows/synchronize.rb +131 -131
  49. data/lib/windows/system_info.rb +227 -222
  50. data/lib/windows/thread.rb +62 -62
  51. data/lib/windows/time.rb +46 -46
  52. data/lib/windows/tool_helper.rb +34 -34
  53. data/lib/windows/volume.rb +59 -59
  54. data/lib/windows/window.rb +79 -79
  55. data/lib/windows/window/classes.rb +57 -57
  56. data/lib/windows/window/dialog.rb +89 -89
  57. data/lib/windows/window/menu.rb +100 -100
  58. data/lib/windows/window/message.rb +295 -295
  59. data/lib/windows/window/properties.rb +18 -18
  60. data/lib/windows/window/timer.rb +17 -17
  61. data/test/tc_clipboard.rb +41 -41
  62. data/test/tc_com.rb +32 -32
  63. data/test/tc_com_automation.rb +15 -15
  64. data/test/tc_console.rb +108 -108
  65. data/test/tc_debug.rb +48 -48
  66. data/test/tc_device_io.rb +29 -29
  67. data/test/tc_directory.rb +25 -25
  68. data/test/tc_error.rb +49 -49
  69. data/test/tc_eventlog.rb +58 -58
  70. data/test/tc_file.rb +67 -67
  71. data/test/tc_file_mapping.rb +38 -38
  72. data/test/tc_filesystem.rb +27 -27
  73. data/test/tc_gdi_bitmap.rb +25 -25
  74. data/test/tc_gdi_metafile.rb +23 -23
  75. data/test/tc_handle.rb +36 -36
  76. data/test/tc_library.rb +37 -37
  77. data/test/tc_limits.rb +34 -34
  78. data/test/tc_mailslot.rb +22 -22
  79. data/test/tc_memory.rb +44 -44
  80. data/test/tc_msvcrt_buffer.rb +68 -68
  81. data/test/tc_msvcrt_directory.rb +98 -98
  82. data/test/tc_msvcrt_file.rb +80 -80
  83. data/test/tc_msvcrt_io.rb +48 -48
  84. data/test/tc_msvcrt_string.rb +93 -93
  85. data/test/tc_msvcrt_time.rb +29 -29
  86. data/test/tc_national.rb +38 -38
  87. data/test/tc_network_management.rb +32 -32
  88. data/test/tc_network_snmp.rb +31 -31
  89. data/test/tc_network_winsock.rb +34 -34
  90. data/test/tc_nio.rb +32 -32
  91. data/test/tc_ntfs_winternl.rb +29 -29
  92. data/test/tc_path.rb +90 -90
  93. data/test/tc_pipe.rb +53 -53
  94. data/test/tc_process.rb +24 -24
  95. data/test/tc_registry.rb +29 -29
  96. data/test/tc_security.rb +104 -104
  97. data/test/tc_security_authentication.rb +34 -34
  98. data/test/tc_service.rb +57 -57
  99. data/test/tc_shell.rb +34 -34
  100. data/test/tc_sound.rb +37 -37
  101. data/test/tc_synchronize.rb +75 -75
  102. data/test/tc_system_info.rb +43 -43
  103. data/test/tc_thread.rb +29 -29
  104. data/test/tc_time.rb +32 -32
  105. data/test/tc_tool_helper.rb +29 -29
  106. data/test/tc_volume.rb +47 -47
  107. data/test/tc_window.rb +45 -45
  108. data/test/tc_window_classes.rb +33 -33
  109. data/test/tc_window_dialog.rb +33 -33
  110. data/test/tc_window_menu.rb +29 -29
  111. data/test/tc_window_message.rb +33 -33
  112. data/test/tc_window_properties.rb +29 -29
  113. data/test/tc_window_timer.rb +29 -29
  114. data/windows-pr.gemspec +34 -34
  115. metadata +4 -4
@@ -1,21 +1,21 @@
1
- require 'windows/api'
2
-
3
- module Windows
4
- module Handle
5
- API.auto_namespace = 'Windows::Handle'
6
- API.auto_constant = true
7
- API.auto_method = true
8
- API.auto_unicode = false
9
-
10
- INVALID_HANDLE_VALUE = 0xFFFFFFFF
11
- HANDLE_FLAG_INHERIT = 0x00000001
12
- HANDLE_FLAG_PROTECT_FROM_CLOSE = 0x00000002
13
-
14
- API.new('CloseHandle', 'L', 'B')
15
- API.new('DuplicateHandle', 'LLLPLIL', 'B')
16
- API.new('GetHandleInformation', 'LL', 'B')
17
- API.new('SetHandleInformation', 'LLL', 'B')
18
- API.new('_get_osfhandle', 'I', 'L', MSVCRT_DLL)
19
- API.new('_open_osfhandle', 'LI', 'I', MSVCRT_DLL)
20
- end
21
- end
1
+ require 'windows/api'
2
+
3
+ module Windows
4
+ module Handle
5
+ API.auto_namespace = 'Windows::Handle'
6
+ API.auto_constant = true
7
+ API.auto_method = true
8
+ API.auto_unicode = false
9
+
10
+ INVALID_HANDLE_VALUE = 0xFFFFFFFF
11
+ HANDLE_FLAG_INHERIT = 0x00000001
12
+ HANDLE_FLAG_PROTECT_FROM_CLOSE = 0x00000002
13
+
14
+ API.new('CloseHandle', 'L', 'B')
15
+ API.new('DuplicateHandle', 'LLLPLIL', 'B')
16
+ API.new('GetHandleInformation', 'LL', 'B')
17
+ API.new('SetHandleInformation', 'LLL', 'B')
18
+ API.new('_get_osfhandle', 'I', 'L', MSVCRT_DLL)
19
+ API.new('_open_osfhandle', 'LI', 'I', MSVCRT_DLL)
20
+ end
21
+ end
@@ -1,42 +1,42 @@
1
- require 'windows/api'
2
-
3
- module Windows
4
- module Library
5
- API.auto_namespace = 'Windows::Library'
6
- API.auto_constant = true
7
- API.auto_method = true
8
- API.auto_unicode = true
9
-
10
- DLL_PROCESS_DETACH = 0
11
- DLL_PROCESS_ATTACH = 1
12
- DLL_THREAD_ATTACH = 2
13
- DLL_THREAD_DETACH = 3
14
-
15
- GET_MODULE_HANDLE_EX_FLAG_PIN = 1
16
- GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2
17
- GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = 4
18
-
19
- DONT_RESOLVE_DLL_REFERENCES = 0x00000001
20
- LOAD_LIBRARY_AS_DATAFILE = 0x00000002
21
- LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008
22
- LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010
23
-
24
- API.new('DisableThreadLibraryCalls', 'L', 'B')
25
- API.new('FreeLibrary', 'L', 'B')
26
- API.new('FreeLibraryAndExitThread', 'LL', 'V')
27
- API.new('GetModuleFileName', 'LPL', 'L')
28
- API.new('GetModuleHandle', 'P', 'L')
29
- API.new('GetProcAddress', 'LP', 'L')
30
- API.new('LoadLibrary', 'P', 'L')
31
- API.new('LoadLibraryEx', 'PLL', 'L')
32
- API.new('LoadModule', 'PP', 'L')
33
-
34
- begin
35
- API.new('GetDllDirectory', 'LP', 'L')
36
- API.new('GetModuleHandleEx', 'LPP', 'I')
37
- API.new('SetDllDirectory', 'P', 'I')
38
- rescue Win32::API::LoadLibraryError
39
- # Windows XP or later
40
- end
41
- end
42
- end
1
+ require 'windows/api'
2
+
3
+ module Windows
4
+ module Library
5
+ API.auto_namespace = 'Windows::Library'
6
+ API.auto_constant = true
7
+ API.auto_method = true
8
+ API.auto_unicode = true
9
+
10
+ DLL_PROCESS_DETACH = 0
11
+ DLL_PROCESS_ATTACH = 1
12
+ DLL_THREAD_ATTACH = 2
13
+ DLL_THREAD_DETACH = 3
14
+
15
+ GET_MODULE_HANDLE_EX_FLAG_PIN = 1
16
+ GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2
17
+ GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = 4
18
+
19
+ DONT_RESOLVE_DLL_REFERENCES = 0x00000001
20
+ LOAD_LIBRARY_AS_DATAFILE = 0x00000002
21
+ LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008
22
+ LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010
23
+
24
+ API.new('DisableThreadLibraryCalls', 'L', 'B')
25
+ API.new('FreeLibrary', 'L', 'B')
26
+ API.new('FreeLibraryAndExitThread', 'LL', 'V')
27
+ API.new('GetModuleFileName', 'LPL', 'L')
28
+ API.new('GetModuleHandle', 'P', 'L')
29
+ API.new('GetProcAddress', 'LP', 'L')
30
+ API.new('LoadLibrary', 'P', 'L')
31
+ API.new('LoadLibraryEx', 'PLL', 'L')
32
+ API.new('LoadModule', 'PP', 'L')
33
+
34
+ begin
35
+ API.new('GetDllDirectory', 'LP', 'L')
36
+ API.new('GetModuleHandleEx', 'LPP', 'I')
37
+ API.new('SetDllDirectory', 'P', 'I')
38
+ rescue Win32::API::LoadLibraryError
39
+ # Windows XP or later
40
+ end
41
+ end
42
+ end
@@ -1,31 +1,31 @@
1
- module Windows
2
- module Limits
3
- MINCHAR = 0x80
4
- MAXCHAR = 0x7f
5
- MINSHORT = 0x8000
6
- MAXSHORT = 0x7fff
7
- MINLONG = 0x80000000
8
- MAXLONG = 0x7fffffff
9
- MAXBYTE = 0xff
10
- MAXWORD = 0xffff
11
- MAXDWORD = 0xffffffff
12
-
13
- # For wide character functions the actual path limit is actually 32k
14
- # for most functions that deal with paths, but in the interests of not
15
- # wasting huge chunks of memory on buffers I limit it to 1k, which
16
- # should be more than enough in practice.
17
- if RUBY_VERSION.to_f >= 1.9
18
- if __ENCODING__.name == 'UTF-8'
19
- MAXPATH = 1024
20
- else
21
- MAXPATH = 256
22
- end
23
- else
24
- if $KCODE == 'UTF8'
25
- MAXPATH = 1024
26
- else
27
- MAXPATH = 256
28
- end
29
- end
30
- end
31
- end
1
+ module Windows
2
+ module Limits
3
+ MINCHAR = 0x80
4
+ MAXCHAR = 0x7f
5
+ MINSHORT = 0x8000
6
+ MAXSHORT = 0x7fff
7
+ MINLONG = 0x80000000
8
+ MAXLONG = 0x7fffffff
9
+ MAXBYTE = 0xff
10
+ MAXWORD = 0xffff
11
+ MAXDWORD = 0xffffffff
12
+
13
+ # For wide character functions the actual path limit is actually 32k
14
+ # for most functions that deal with paths, but in the interests of not
15
+ # wasting huge chunks of memory on buffers I limit it to 1k, which
16
+ # should be more than enough in practice.
17
+ if RUBY_VERSION.to_f >= 1.9
18
+ if __ENCODING__.name == 'UTF-8'
19
+ MAXPATH = 1024
20
+ else
21
+ MAXPATH = 256
22
+ end
23
+ else
24
+ if $KCODE == 'UTF8'
25
+ MAXPATH = 1024
26
+ else
27
+ MAXPATH = 256
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,22 +1,22 @@
1
- require 'windows/api'
2
-
3
- # The Windows module serves as a namespace only.
4
- module Windows
5
- # The Mailslot module contains functions and constants related to the
6
- # Windows mailslot IPC mechanism.
7
- module Mailslot
8
- API.auto_namespace = 'Windows::Mailslot'
9
- API.auto_constant = true
10
- API.auto_method = true
11
- API.auto_unicode = true
12
-
13
- # Constants
14
-
15
- MAILSLOT_WAIT_FOREVER = 0xFFFFFFFF
16
- MAILSLOT_NO_MESSAGE = 0xFFFFFFFF
17
-
18
- API.new('CreateMailslot', 'SLLP', 'L')
19
- API.new('GetMailslotInfo', 'LPPPP', 'B')
20
- API.new('SetMailslotInfo', 'LL', 'B')
21
- end
22
- end
1
+ require 'windows/api'
2
+
3
+ # The Windows module serves as a namespace only.
4
+ module Windows
5
+ # The Mailslot module contains functions and constants related to the
6
+ # Windows mailslot IPC mechanism.
7
+ module Mailslot
8
+ API.auto_namespace = 'Windows::Mailslot'
9
+ API.auto_constant = true
10
+ API.auto_method = true
11
+ API.auto_unicode = true
12
+
13
+ # Constants
14
+
15
+ MAILSLOT_WAIT_FOREVER = 0xFFFFFFFF
16
+ MAILSLOT_NO_MESSAGE = 0xFFFFFFFF
17
+
18
+ API.new('CreateMailslot', 'SLLP', 'L')
19
+ API.new('GetMailslotInfo', 'LPPPP', 'B')
20
+ API.new('SetMailslotInfo', 'LL', 'B')
21
+ end
22
+ end
@@ -1,126 +1,126 @@
1
- require 'windows/api'
2
-
3
- module Windows
4
- module Memory
5
- API.auto_namespace = 'Windows::Memory'
6
- API.auto_constant = true
7
- API.auto_method = true
8
- API.auto_unicode = false
9
-
10
- GHND = 0x0042
11
- GMEM_FIXED = 0x0000
12
- GMEM_MOVABLE = 0002
13
- GMEM_ZEROINIT = 0x0040
14
- GPTR = 0x0040
15
-
16
- HEAP_NO_SERIALIZE = 0x00000001
17
- HEAP_GENERATE_EXCEPTIONS = 0x00000004
18
- HEAP_ZERO_MEMORY = 0x00000008
19
- HEAP_REALLOC_IN_PLACE_ONLY = 0x00000010
20
- HEAP_CREATE_ENABLE_EXECUTE = 0x00040000
21
-
22
- MEM_COMMIT = 0x1000
23
- MEM_RESERVE = 0x2000
24
- MEM_DECOMMIT = 0x4000
25
- MEM_RELEASE = 0x8000
26
- MEM_FREE = 0x10000
27
- MEM_PRIVATE = 0x20000
28
- MEM_MAPPED = 0x40000
29
- MEM_RESET = 0x80000
30
- MEM_TOP_DOWN = 0x100000
31
- MEM_WRITE_WATCH = 0x200000
32
- MEM_PHYSICAL = 0x400000
33
- MEM_LARGE_PAGES = 0x20000000
34
- MEM_4MB_PAGES = 0x80000000200000
35
-
36
- PAGE_NOACCESS = 0x01
37
- PAGE_READONLY = 0x02
38
- PAGE_READWRITE = 0x04
39
- PAGE_WRITECOPY = 0x08
40
- PAGE_EXECUTE = 0x10
41
- PAGE_EXECUTE_READ = 0x20
42
- PAGE_EXECUTE_READWRITE = 0x40
43
- PAGE_EXECUTE_WRITECOPY = 0x80
44
- PAGE_GUARD = 0x100
45
- PAGE_NOCACHE = 0x200
46
- PAGE_WRITECOMBINE = 0x400
47
-
48
- SEC_FILE = 0x800000
49
- SEC_IMAGE = 0x1000000
50
- SEC_VLM = 0x2000000
51
- SEC_RESERVE = 0x4000000
52
- SEC_COMMIT = 0x8000000
53
- SEC_NOCACHE = 0x10000000
54
-
55
- LMEM_FIXED = 0x0000
56
- LMEM_MOVEABLE = 0x0002
57
- LMEM_NOCOMPACT = 0x0010
58
- LMEM_NODISCARD = 0x0020
59
- LMEM_ZEROINIT = 0x0040
60
- LMEM_MODIFY = 0x0080
61
- LMEM_DISCARDABLE = 0x0F00
62
- LMEM_VALID_FLAGS = 0x0F72
63
- LMEM_INVALID_HANDLE = 0x8000
64
- LMEM_DISCARDED = 0x4000
65
- LMEM_LOCKCOUNT = 0x00FF
66
-
67
- API.new('GlobalAlloc', 'LL', 'L')
68
- API.new('GlobalFlags', 'L', 'L')
69
- API.new('GlobalFree', 'L', 'L')
70
- API.new('GlobalHandle', 'P', 'L')
71
- API.new('GlobalLock', 'L', 'L')
72
- API.new('GlobalMemoryStatus', 'P', 'V')
73
- API.new('GlobalMemoryStatusEx', 'P', 'V')
74
- API.new('GlobalReAlloc', 'LLL', 'L')
75
- API.new('GlobalSize', 'L', 'L')
76
- API.new('GlobalUnlock', 'L', 'L')
77
-
78
- API.new('GetProcessHeap', 'V', 'L')
79
- API.new('GetProcessHeaps', 'LP', 'L')
80
- API.new('HeapAlloc', 'LLL', 'P')
81
- API.new('HeapCompact', 'LL', 'L')
82
- API.new('HeapCreate', 'LLL', 'L')
83
- API.new('HeapDestroy', 'L', 'B')
84
- API.new('HeapFree', 'LLL', 'B')
85
- API.new('HeapLock', 'L', 'B')
86
- API.new('HeapReAlloc', 'LLLL', 'L')
87
- API.new('HeapSize', 'LLL', 'L')
88
- API.new('HeapUnlock', 'L', 'B')
89
- API.new('HeapValidate', 'LLL', 'B')
90
- API.new('HeapWalk', 'LP', 'B')
91
-
92
- API.new('LocalAlloc', 'LL', 'L')
93
- API.new('LocalFlags', 'L', 'L')
94
- API.new('LocalFree', 'L', 'L')
95
- API.new('LocalHandle', 'L', 'L')
96
- API.new('LocalLock', 'L', 'L')
97
- API.new('LocalReAlloc', 'LLL', 'L')
98
- API.new('LocalSize', 'L', 'L')
99
- API.new('LocalUnlock', 'L', 'B')
100
-
101
- API.new('VirtualAlloc', 'LLLL', 'L')
102
- API.new('VirtualAllocEx', 'LLLLL', 'L')
103
- API.new('VirtualFree', 'LLL', 'B')
104
- API.new('VirtualFreeEx', 'LLLL', 'B')
105
- API.new('VirtualLock', 'LL', 'B')
106
- API.new('VirtualProtect', 'LLLP', 'B')
107
- API.new('VirtualProtectEx', 'LLLLP', 'B')
108
- API.new('VirtualQuery', 'LPL', 'L')
109
- API.new('VirtualQueryEx', 'LLPL', 'L')
110
- API.new('VirtualUnlock', 'LL', 'B')
111
- API.new('RtlZeroMemory', 'PL', 'L')
112
-
113
- # The LocalDiscard macro from winbase.h
114
- def LocalDiscard(mem_loc)
115
- LocalReAlloc(mem_loc, 0, LMEM_MOVEABLE)
116
- end
117
-
118
- # Windows XP or later
119
- begin
120
- API.new('HeapQueryInformation', 'LIPLL', 'B')
121
- API.new('HeapSetInformation', 'LIPL', 'B')
122
- rescue Win32::API::LoadLibraryError
123
- # Do nothing - you must check for their existence
124
- end
125
- end
126
- end
1
+ require 'windows/api'
2
+
3
+ module Windows
4
+ module Memory
5
+ API.auto_namespace = 'Windows::Memory'
6
+ API.auto_constant = true
7
+ API.auto_method = true
8
+ API.auto_unicode = false
9
+
10
+ GHND = 0x0042
11
+ GMEM_FIXED = 0x0000
12
+ GMEM_MOVABLE = 0002
13
+ GMEM_ZEROINIT = 0x0040
14
+ GPTR = 0x0040
15
+
16
+ HEAP_NO_SERIALIZE = 0x00000001
17
+ HEAP_GENERATE_EXCEPTIONS = 0x00000004
18
+ HEAP_ZERO_MEMORY = 0x00000008
19
+ HEAP_REALLOC_IN_PLACE_ONLY = 0x00000010
20
+ HEAP_CREATE_ENABLE_EXECUTE = 0x00040000
21
+
22
+ MEM_COMMIT = 0x1000
23
+ MEM_RESERVE = 0x2000
24
+ MEM_DECOMMIT = 0x4000
25
+ MEM_RELEASE = 0x8000
26
+ MEM_FREE = 0x10000
27
+ MEM_PRIVATE = 0x20000
28
+ MEM_MAPPED = 0x40000
29
+ MEM_RESET = 0x80000
30
+ MEM_TOP_DOWN = 0x100000
31
+ MEM_WRITE_WATCH = 0x200000
32
+ MEM_PHYSICAL = 0x400000
33
+ MEM_LARGE_PAGES = 0x20000000
34
+ MEM_4MB_PAGES = 0x80000000200000
35
+
36
+ PAGE_NOACCESS = 0x01
37
+ PAGE_READONLY = 0x02
38
+ PAGE_READWRITE = 0x04
39
+ PAGE_WRITECOPY = 0x08
40
+ PAGE_EXECUTE = 0x10
41
+ PAGE_EXECUTE_READ = 0x20
42
+ PAGE_EXECUTE_READWRITE = 0x40
43
+ PAGE_EXECUTE_WRITECOPY = 0x80
44
+ PAGE_GUARD = 0x100
45
+ PAGE_NOCACHE = 0x200
46
+ PAGE_WRITECOMBINE = 0x400
47
+
48
+ SEC_FILE = 0x800000
49
+ SEC_IMAGE = 0x1000000
50
+ SEC_VLM = 0x2000000
51
+ SEC_RESERVE = 0x4000000
52
+ SEC_COMMIT = 0x8000000
53
+ SEC_NOCACHE = 0x10000000
54
+
55
+ LMEM_FIXED = 0x0000
56
+ LMEM_MOVEABLE = 0x0002
57
+ LMEM_NOCOMPACT = 0x0010
58
+ LMEM_NODISCARD = 0x0020
59
+ LMEM_ZEROINIT = 0x0040
60
+ LMEM_MODIFY = 0x0080
61
+ LMEM_DISCARDABLE = 0x0F00
62
+ LMEM_VALID_FLAGS = 0x0F72
63
+ LMEM_INVALID_HANDLE = 0x8000
64
+ LMEM_DISCARDED = 0x4000
65
+ LMEM_LOCKCOUNT = 0x00FF
66
+
67
+ API.new('GlobalAlloc', 'LL', 'L')
68
+ API.new('GlobalFlags', 'L', 'L')
69
+ API.new('GlobalFree', 'L', 'L')
70
+ API.new('GlobalHandle', 'P', 'L')
71
+ API.new('GlobalLock', 'L', 'L')
72
+ API.new('GlobalMemoryStatus', 'P', 'V')
73
+ API.new('GlobalMemoryStatusEx', 'P', 'V')
74
+ API.new('GlobalReAlloc', 'LLL', 'L')
75
+ API.new('GlobalSize', 'L', 'L')
76
+ API.new('GlobalUnlock', 'L', 'L')
77
+
78
+ API.new('GetProcessHeap', 'V', 'L')
79
+ API.new('GetProcessHeaps', 'LP', 'L')
80
+ API.new('HeapAlloc', 'LLL', 'P')
81
+ API.new('HeapCompact', 'LL', 'L')
82
+ API.new('HeapCreate', 'LLL', 'L')
83
+ API.new('HeapDestroy', 'L', 'B')
84
+ API.new('HeapFree', 'LLL', 'B')
85
+ API.new('HeapLock', 'L', 'B')
86
+ API.new('HeapReAlloc', 'LLLL', 'L')
87
+ API.new('HeapSize', 'LLL', 'L')
88
+ API.new('HeapUnlock', 'L', 'B')
89
+ API.new('HeapValidate', 'LLL', 'B')
90
+ API.new('HeapWalk', 'LP', 'B')
91
+
92
+ API.new('LocalAlloc', 'LL', 'L')
93
+ API.new('LocalFlags', 'L', 'L')
94
+ API.new('LocalFree', 'L', 'L')
95
+ API.new('LocalHandle', 'L', 'L')
96
+ API.new('LocalLock', 'L', 'L')
97
+ API.new('LocalReAlloc', 'LLL', 'L')
98
+ API.new('LocalSize', 'L', 'L')
99
+ API.new('LocalUnlock', 'L', 'B')
100
+
101
+ API.new('VirtualAlloc', 'LLLL', 'L')
102
+ API.new('VirtualAllocEx', 'LLLLL', 'L')
103
+ API.new('VirtualFree', 'LLL', 'B')
104
+ API.new('VirtualFreeEx', 'LLLL', 'B')
105
+ API.new('VirtualLock', 'LL', 'B')
106
+ API.new('VirtualProtect', 'LLLP', 'B')
107
+ API.new('VirtualProtectEx', 'LLLLP', 'B')
108
+ API.new('VirtualQuery', 'LPL', 'L')
109
+ API.new('VirtualQueryEx', 'LLPL', 'L')
110
+ API.new('VirtualUnlock', 'LL', 'B')
111
+ API.new('RtlZeroMemory', 'PL', 'L')
112
+
113
+ # The LocalDiscard macro from winbase.h
114
+ def LocalDiscard(mem_loc)
115
+ LocalReAlloc(mem_loc, 0, LMEM_MOVEABLE)
116
+ end
117
+
118
+ # Windows XP or later
119
+ begin
120
+ API.new('HeapQueryInformation', 'LIPLL', 'B')
121
+ API.new('HeapSetInformation', 'LIPL', 'B')
122
+ rescue Win32::API::LoadLibraryError
123
+ # Do nothing - you must check for their existence
124
+ end
125
+ end
126
+ end