@@ -6,123 +6,57 @@ mod _winapi {
66 use crate :: {
77 builtins:: PyStrRef ,
88 common:: windows:: ToWideString ,
9- convert:: { ToPyException , ToPyObject , ToPyResult } ,
9+ convert:: { ToPyException , ToPyResult } ,
1010 function:: { ArgMapping , ArgSequence , OptionalArg } ,
1111 stdlib:: os:: errno_err,
12+ windows:: WindowsSysResult ,
1213 PyObjectRef , PyResult , TryFromObject , VirtualMachine ,
1314 } ;
1415 use std:: ptr:: { null, null_mut} ;
15- use winapi:: um:: winbase;
1616 use windows:: {
1717 core:: PCWSTR ,
1818 Win32 :: Foundation :: { HANDLE , HINSTANCE , MAX_PATH } ,
1919 } ;
2020 use windows_sys:: Win32 :: Foundation :: { BOOL , HANDLE as RAW_HANDLE } ;
2121
2222 #[ pyattr]
23- use winapi:: {
24- shared:: winerror:: {
25- ERROR_ALREADY_EXISTS , ERROR_BROKEN_PIPE , ERROR_IO_PENDING , ERROR_MORE_DATA ,
26- ERROR_NETNAME_DELETED , ERROR_NO_DATA , ERROR_NO_SYSTEM_RESOURCES ,
27- ERROR_OPERATION_ABORTED , ERROR_PIPE_BUSY , ERROR_PIPE_CONNECTED , ERROR_SEM_TIMEOUT ,
28- WAIT_TIMEOUT ,
23+ use windows_sys:: Win32 :: {
24+ Foundation :: {
25+ DUPLICATE_CLOSE_SOURCE , DUPLICATE_SAME_ACCESS , ERROR_ALREADY_EXISTS , ERROR_BROKEN_PIPE ,
26+ ERROR_IO_PENDING , ERROR_MORE_DATA , ERROR_NETNAME_DELETED , ERROR_NO_DATA ,
27+ ERROR_NO_SYSTEM_RESOURCES , ERROR_OPERATION_ABORTED , ERROR_PIPE_BUSY ,
28+ ERROR_PIPE_CONNECTED , ERROR_SEM_TIMEOUT , GENERIC_READ , GENERIC_WRITE , STILL_ACTIVE ,
29+ WAIT_ABANDONED , WAIT_ABANDONED_0 , WAIT_OBJECT_0 , WAIT_TIMEOUT ,
2930 } ,
30- um:: {
31- fileapi:: OPEN_EXISTING ,
32- memoryapi:: {
33- FILE_MAP_ALL_ACCESS , FILE_MAP_COPY , FILE_MAP_EXECUTE , FILE_MAP_READ , FILE_MAP_WRITE ,
31+ Storage :: FileSystem :: {
32+ FILE_FLAG_FIRST_PIPE_INSTANCE , FILE_FLAG_OVERLAPPED , FILE_GENERIC_READ ,
33+ FILE_GENERIC_WRITE , FILE_TYPE_CHAR , FILE_TYPE_DISK , FILE_TYPE_PIPE , FILE_TYPE_REMOTE ,
34+ FILE_TYPE_UNKNOWN , OPEN_EXISTING , PIPE_ACCESS_DUPLEX , PIPE_ACCESS_INBOUND , SYNCHRONIZE ,
35+ } ,
36+ System :: {
37+ Console :: { STD_ERROR_HANDLE , STD_INPUT_HANDLE , STD_OUTPUT_HANDLE } ,
38+ Memory :: {
39+ FILE_MAP_ALL_ACCESS , MEM_COMMIT , MEM_FREE , MEM_IMAGE , MEM_MAPPED , MEM_PRIVATE ,
40+ MEM_RESERVE , PAGE_EXECUTE , PAGE_EXECUTE_READ , PAGE_EXECUTE_READWRITE ,
41+ PAGE_EXECUTE_WRITECOPY , PAGE_GUARD , PAGE_NOACCESS , PAGE_NOCACHE , PAGE_READONLY ,
42+ PAGE_READWRITE , PAGE_WRITECOMBINE , PAGE_WRITECOPY , SEC_COMMIT , SEC_IMAGE ,
43+ SEC_LARGE_PAGES , SEC_NOCACHE , SEC_RESERVE , SEC_WRITECOMBINE ,
44+ } ,
45+ Pipes :: {
46+ PIPE_READMODE_MESSAGE , PIPE_TYPE_MESSAGE , PIPE_UNLIMITED_INSTANCES , PIPE_WAIT ,
3447 } ,
35- minwinbase :: STILL_ACTIVE ,
36- winbase :: {
48+ SystemServices :: LOCALE_NAME_MAX_LENGTH ,
49+ Threading :: {
3750 ABOVE_NORMAL_PRIORITY_CLASS , BELOW_NORMAL_PRIORITY_CLASS ,
3851 CREATE_BREAKAWAY_FROM_JOB , CREATE_DEFAULT_ERROR_MODE , CREATE_NEW_CONSOLE ,
39- CREATE_NEW_PROCESS_GROUP , CREATE_NO_WINDOW , DETACHED_PROCESS ,
40- FILE_FLAG_FIRST_PIPE_INSTANCE , FILE_FLAG_OVERLAPPED , FILE_TYPE_CHAR ,
41- FILE_TYPE_DISK , FILE_TYPE_PIPE , FILE_TYPE_REMOTE , FILE_TYPE_UNKNOWN ,
42- HIGH_PRIORITY_CLASS , IDLE_PRIORITY_CLASS , INFINITE , NORMAL_PRIORITY_CLASS ,
43- PIPE_ACCESS_DUPLEX , PIPE_ACCESS_INBOUND , PIPE_READMODE_MESSAGE , PIPE_TYPE_MESSAGE ,
44- PIPE_UNLIMITED_INSTANCES , PIPE_WAIT , REALTIME_PRIORITY_CLASS , STARTF_USESHOWWINDOW ,
45- STARTF_USESTDHANDLES , STD_ERROR_HANDLE , STD_INPUT_HANDLE , STD_OUTPUT_HANDLE ,
46- WAIT_ABANDONED , WAIT_ABANDONED_0 , WAIT_OBJECT_0 ,
52+ CREATE_NEW_PROCESS_GROUP , CREATE_NO_WINDOW , DETACHED_PROCESS , HIGH_PRIORITY_CLASS ,
53+ IDLE_PRIORITY_CLASS , INFINITE , NORMAL_PRIORITY_CLASS , PROCESS_DUP_HANDLE ,
54+ REALTIME_PRIORITY_CLASS , STARTF_USESHOWWINDOW , STARTF_USESTDHANDLES ,
4755 } ,
48- winnt:: {
49- DUPLICATE_CLOSE_SOURCE , DUPLICATE_SAME_ACCESS , FILE_GENERIC_READ ,
50- FILE_GENERIC_WRITE , GENERIC_READ , GENERIC_WRITE , LOCALE_NAME_MAX_LENGTH ,
51- MEM_COMMIT , MEM_FREE , MEM_IMAGE , MEM_MAPPED , MEM_PRIVATE , MEM_RESERVE ,
52- PAGE_EXECUTE , PAGE_EXECUTE_READ , PAGE_EXECUTE_READWRITE , PAGE_EXECUTE_WRITECOPY ,
53- PAGE_GUARD , PAGE_NOACCESS , PAGE_NOCACHE , PAGE_READONLY , PAGE_READWRITE ,
54- PAGE_WRITECOMBINE , PAGE_WRITECOPY , PROCESS_DUP_HANDLE , SEC_COMMIT , SEC_IMAGE ,
55- SEC_LARGE_PAGES , SEC_NOCACHE , SEC_RESERVE , SEC_WRITECOMBINE , SYNCHRONIZE ,
56- } ,
57- winuser:: SW_HIDE ,
5856 } ,
57+ UI :: WindowsAndMessaging :: SW_HIDE ,
5958 } ;
6059
61- fn GetLastError ( ) -> u32 {
62- unsafe { winapi:: um:: errhandlingapi:: GetLastError ( ) }
63- }
64-
65- trait WindowsSysResultValue {
66- type Ok : ToPyObject ;
67- fn is_err ( & self ) -> bool ;
68- fn into_ok ( self ) -> Self :: Ok ;
69- }
70-
71- impl WindowsSysResultValue for RAW_HANDLE {
72- type Ok = HANDLE ;
73- fn is_err ( & self ) -> bool {
74- * self == windows_sys:: Win32 :: Foundation :: INVALID_HANDLE_VALUE
75- }
76- fn into_ok ( self ) -> Self :: Ok {
77- HANDLE ( self )
78- }
79- }
80-
81- impl WindowsSysResultValue for BOOL {
82- type Ok = ( ) ;
83- fn is_err ( & self ) -> bool {
84- * self == 0
85- }
86- fn into_ok ( self ) -> Self :: Ok { }
87- }
88-
89- struct WindowsSysResult < T > ( T ) ;
90-
91- impl < T : WindowsSysResultValue > WindowsSysResult < T > {
92- fn is_err ( & self ) -> bool {
93- self . 0 . is_err ( )
94- }
95- fn into_pyresult ( self , vm : & VirtualMachine ) -> PyResult < T :: Ok > {
96- if self . is_err ( ) {
97- Err ( errno_err ( vm) )
98- } else {
99- Ok ( self . 0 . into_ok ( ) )
100- }
101- }
102- }
103-
104- impl < T : WindowsSysResultValue > ToPyResult for WindowsSysResult < T > {
105- fn to_pyresult ( self , vm : & VirtualMachine ) -> PyResult {
106- let ok = self . into_pyresult ( vm) ?;
107- Ok ( ok. to_pyobject ( vm) )
108- }
109- }
110-
111- type HandleInt = usize ; // TODO: change to isize when fully ported to windows-rs
112-
113- impl TryFromObject for HANDLE {
114- fn try_from_object ( vm : & VirtualMachine , obj : PyObjectRef ) -> PyResult < Self > {
115- let handle = HandleInt :: try_from_object ( vm, obj) ?;
116- Ok ( HANDLE ( handle as isize ) )
117- }
118- }
119-
120- impl ToPyObject for HANDLE {
121- fn to_pyobject ( self , vm : & VirtualMachine ) -> PyObjectRef {
122- ( self . 0 as HandleInt ) . to_pyobject ( vm)
123- }
124- }
125-
12660 #[ pyfunction]
12761 fn CloseHandle ( handle : HANDLE ) -> WindowsSysResult < BOOL > {
12862 WindowsSysResult ( unsafe { windows_sys:: Win32 :: Foundation :: CloseHandle ( handle. 0 ) } )
@@ -193,7 +127,7 @@ mod _winapi {
193127 vm : & VirtualMachine ,
194128 ) -> PyResult < windows_sys:: Win32 :: Storage :: FileSystem :: FILE_TYPE > {
195129 let file_type = unsafe { windows_sys:: Win32 :: Storage :: FileSystem :: GetFileType ( h. 0 ) } ;
196- if file_type == 0 && GetLastError ( ) != 0 {
130+ if file_type == 0 && unsafe { windows_sys :: Win32 :: Foundation :: GetLastError ( ) } != 0 {
197131 Err ( errno_err ( vm) )
198132 } else {
199133 Ok ( file_type)
@@ -227,7 +161,8 @@ mod _winapi {
227161 args : CreateProcessArgs ,
228162 vm : & VirtualMachine ,
229163 ) -> PyResult < ( HANDLE , HANDLE , u32 , u32 ) > {
230- let mut si = winbase:: STARTUPINFOEXW :: default ( ) ;
164+ let mut si: windows_sys:: Win32 :: System :: Threading :: STARTUPINFOEXW =
165+ unsafe { std:: mem:: zeroed ( ) } ;
231166 si. StartupInfo . cb = std:: mem:: size_of_val ( & si) as _ ;
232167
233168 macro_rules! si_attr {
@@ -292,11 +227,11 @@ mod _winapi {
292227 std:: ptr:: null ( ) ,
293228 args. inherit_handles ,
294229 args. creation_flags
295- | winbase :: EXTENDED_STARTUPINFO_PRESENT
296- | winbase :: CREATE_UNICODE_ENVIRONMENT ,
230+ | windows_sys :: Win32 :: System :: Threading :: EXTENDED_STARTUPINFO_PRESENT
231+ | windows_sys :: Win32 :: System :: Threading :: CREATE_UNICODE_ENVIRONMENT ,
297232 env as _ ,
298233 current_dir,
299- & mut si as * mut winbase :: STARTUPINFOEXW as _ ,
234+ & mut si as * mut _ as * mut _ ,
300235 procinfo. as_mut_ptr ( ) ,
301236 ) )
302237 . into_pyresult ( vm) ?;
@@ -390,7 +325,8 @@ mod _winapi {
390325 ( result, size. assume_init ( ) )
391326 } ;
392327 if !result. is_err ( )
393- || GetLastError ( ) != winapi:: shared:: winerror:: ERROR_INSUFFICIENT_BUFFER
328+ || unsafe { windows_sys:: Win32 :: Foundation :: GetLastError ( ) }
329+ != windows_sys:: Win32 :: Foundation :: ERROR_INSUFFICIENT_BUFFER
394330 {
395331 return Err ( errno_err ( vm) ) ;
396332 }
0 commit comments