Message279047
Kelvin is calling WlanScan [1], which returns an error code that apparently can include HRESULT (signed) values cast as DWORD (unsigned) values, including 0x80342002 (ERROR_NDIS_DOT11_POWER_STATE_INVALID).
ctypes.FormatError calls FormatMessage [2] with the flag FORMAT_MESSAGE_FROM_SYSTEM. About half of the system error codes defined in winerror.h consist of COM HRESULT codes. But, to clarify Kelvin's link [3], this does not include NTSTATUS values from kernel-mode system calls. NTSTATUS values require the ntdll.dll message table.
[1]: https://msdn.microsoft.com/en-us/library/ms706783
[2]: https://msdn.microsoft.com/en-us/library/ms679351
[3]: https://msdn.microsoft.com/en-us/library/cc231196
A workaround in this case is to use the default c_int restype to return the error as a signed integer:
>>> ctypes.FormatError(0x80342002 - 2**32)
"The wireless local area network interface is powered down and doesn't
support the requested operation."
A similar workaround works for setting the exit code to an HRESULT or NTSTATUS error code:
>>> hex(subprocess.call('python -c "import os; os._exit(0xC0000001)"'))
Traceback (most recent call last):
File "<string>", line 1, in <module>
OverflowError: Python int too large to convert to C long
'0x1'
>>> hex(subprocess.call('python -c "import sys; sys.exit(0xC0000001)"'))
'0xffffffff'
>>> hex(subprocess.call('python -c "import os; os._exit(0xC0000001 - 2**32)"'))
'0xc0000001'
>>> hex(subprocess.call('python -c "import sys; sys.exit(0xC0000001 - 2**32)"'))
'0xc0000001' |
|
Date |
User |
Action |
Args |
2016-10-20 16:48:50 | eryksun | set | recipients:
+ eryksun, paul.moore, amaury.forgeotdarc, belopolsky, tim.golden, meador.inge, zach.ware, steve.dower, josh.r, Kelvin You |
2016-10-20 16:48:50 | eryksun | set | messageid: <1476982130.37.0.96244748857.issue28474@psf.upfronthosting.co.za> |
2016-10-20 16:48:50 | eryksun | link | issue28474 messages |
2016-10-20 16:48:50 | eryksun | create | |
|