Fix CreateFile error_check: now raise on INVALID_HANDLE_VALUE

This commit is contained in:
hakril
2016-01-13 23:35:49 +01:00
parent e0d430b3fc
commit c35e517b35
5 changed files with 29 additions and 3 deletions
+6
View File
@@ -111,9 +111,15 @@ common_header = "#Generated file\n"
defs_header = common_header + """
import sys
import platform
if sys.version_info.major == 3:
long = int
bits = platform.architecture()[0]
bitness = int(bits[:2])
NATIVE_WORD_MAX_VALUE = 0xffffffff if bitness == 32 else 0xffffffffffffffff
class Flag(long):
def __new__(cls, name, value):
return super(Flag, cls).__new__(cls, value)
+1
View File
@@ -1,3 +1,4 @@
#define INVALID_HANDLE_VALUE ((-1) & NATIVE_WORD_MAX_VALUE)
#define NULL 0
#define MAX_PATH 260
#define ANYSIZE_ARRAY 1
+7
View File
@@ -1,9 +1,15 @@
#Generated file
import sys
import platform
if sys.version_info.major == 3:
long = int
bits = platform.architecture()[0]
bitness = int(bits[:2])
NATIVE_WORD_MAX_VALUE = 0xffffffff if bitness == 32 else 0xffffffffffffffff
class Flag(long):
def __new__(cls, name, value):
return super(Flag, cls).__new__(cls, value)
@@ -16,6 +22,7 @@ class Flag(long):
__str__ = __repr__
INVALID_HANDLE_VALUE = Flag("INVALID_HANDLE_VALUE", ( ( -1 ) & NATIVE_WORD_MAX_VALUE ))
NULL = Flag("NULL", 0)
MAX_PATH = Flag("MAX_PATH", 260)
ANYSIZE_ARRAY = Flag("ANYSIZE_ARRAY", 1)
+6 -1
View File
@@ -285,10 +285,15 @@ class WindowsTestCase(unittest.TestCase):
cont = t.context
self.assertEqual(cont.Rax, 0x4242424243434343)
class WindowsAPITestCase(unittest.TestCase):
def test_createfileA_fail(self):
with self.assertRaises(WindowsError) as ar:
windows.winproxy.CreateFileA("NONEXISTFILE.FILE")
if __name__ == '__main__':
alltests = unittest.TestSuite()
alltests.addTest(unittest.makeSuite(WindowsTestCase))
alltests.addTest(unittest.makeSuite(WindowsTestCase), unittest.makeSuite(WindowsAPITestCase))
alltests.debug()
tester = unittest.TextTestRunner(verbosity=2)
tester.run(alltests)
+9 -2
View File
@@ -252,12 +252,19 @@ Wow64EnableWow64FsRedirection = OptionalExport(TransparentKernel32Proxy)("Wow64E
Wow64GetThreadContext = OptionalExport(TransparentKernel32Proxy)("Wow64GetThreadContext")
@Kernel32Proxy("CreateFileA")
def CreateFile_error_check(func_name, result, func, args):
"""raise Kernel32Error if result is NOT 0"""
if result == INVALID_HANDLE_VALUE:
raise Kernel32Error(func_name)
return args
@Kernel32Proxy("CreateFileA", error_check=CreateFile_error_check)
def CreateFileA(lpFileName, dwDesiredAccess=GENERIC_READ, dwShareMode=0, lpSecurityAttributes=None, dwCreationDisposition=OPEN_EXISTING, dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL, hTemplateFile=None):
return CreateFileA.ctypes_function(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile)
@Kernel32Proxy("CreateFileW")
@Kernel32Proxy("CreateFileW", error_check=CreateFile_error_check)
def CreateFileW(lpFileName, dwDesiredAccess=GENERIC_READ, dwShareMode=0, lpSecurityAttributes=None, dwCreationDisposition=OPEN_EXISTING, dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL, hTemplateFile=None):
return CreateFileA.ctypes_function(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile)