kernel32: DeviceIoControl: lpBytesReturned must not be NULL if lpOverlapped is NULL.
This commit is contained in:
parent
e01452bf45
commit
4192d34dd9
|
@ -551,7 +551,8 @@ BOOL WINAPI BuildCommDCBW(
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI SetCommBreak(HANDLE handle)
|
BOOL WINAPI SetCommBreak(HANDLE handle)
|
||||||
{
|
{
|
||||||
return DeviceIoControl(handle, IOCTL_SERIAL_SET_BREAK_ON, NULL, 0, NULL, 0, NULL, NULL);
|
DWORD dwBytesReturned;
|
||||||
|
return DeviceIoControl(handle, IOCTL_SERIAL_SET_BREAK_ON, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -573,7 +574,8 @@ BOOL WINAPI SetCommBreak(HANDLE handle)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI ClearCommBreak(HANDLE handle)
|
BOOL WINAPI ClearCommBreak(HANDLE handle)
|
||||||
{
|
{
|
||||||
return DeviceIoControl(handle, IOCTL_SERIAL_SET_BREAK_OFF, NULL, 0, NULL, 0, NULL, NULL);
|
DWORD dwBytesReturned;
|
||||||
|
return DeviceIoControl(handle, IOCTL_SERIAL_SET_BREAK_OFF, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -595,6 +597,7 @@ BOOL WINAPI ClearCommBreak(HANDLE handle)
|
||||||
BOOL WINAPI EscapeCommFunction(HANDLE handle, UINT func)
|
BOOL WINAPI EscapeCommFunction(HANDLE handle, UINT func)
|
||||||
{
|
{
|
||||||
DWORD ioc;
|
DWORD ioc;
|
||||||
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
switch (func)
|
switch (func)
|
||||||
{
|
{
|
||||||
|
@ -612,7 +615,7 @@ BOOL WINAPI EscapeCommFunction(HANDLE handle, UINT func)
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return DeviceIoControl(handle, ioc, NULL, 0, NULL, 0, NULL, NULL);
|
return DeviceIoControl(handle, ioc, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
|
@ -632,8 +635,9 @@ BOOL WINAPI EscapeCommFunction(HANDLE handle, UINT func)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI PurgeComm(HANDLE handle, DWORD flags)
|
BOOL WINAPI PurgeComm(HANDLE handle, DWORD flags)
|
||||||
{
|
{
|
||||||
|
DWORD dwBytesReturned;
|
||||||
return DeviceIoControl(handle, IOCTL_SERIAL_PURGE, &flags, sizeof(flags),
|
return DeviceIoControl(handle, IOCTL_SERIAL_PURGE, &flags, sizeof(flags),
|
||||||
NULL, 0, NULL, NULL);
|
NULL, 0, &dwBytesReturned, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -654,9 +658,10 @@ BOOL WINAPI PurgeComm(HANDLE handle, DWORD flags)
|
||||||
BOOL WINAPI ClearCommError(HANDLE handle, LPDWORD errors, LPCOMSTAT lpStat)
|
BOOL WINAPI ClearCommError(HANDLE handle, LPDWORD errors, LPCOMSTAT lpStat)
|
||||||
{
|
{
|
||||||
SERIAL_STATUS ss;
|
SERIAL_STATUS ss;
|
||||||
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
if (!DeviceIoControl(handle, IOCTL_SERIAL_GET_COMMSTATUS, NULL, 0,
|
if (!DeviceIoControl(handle, IOCTL_SERIAL_GET_COMMSTATUS, NULL, 0,
|
||||||
&ss, sizeof(ss), NULL, NULL))
|
&ss, sizeof(ss), &dwBytesReturned, NULL))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (errors)
|
if (errors)
|
||||||
|
@ -708,11 +713,12 @@ BOOL WINAPI ClearCommError(HANDLE handle, LPDWORD errors, LPCOMSTAT lpStat)
|
||||||
BOOL WINAPI SetupComm(HANDLE handle, DWORD insize, DWORD outsize)
|
BOOL WINAPI SetupComm(HANDLE handle, DWORD insize, DWORD outsize)
|
||||||
{
|
{
|
||||||
SERIAL_QUEUE_SIZE sqs;
|
SERIAL_QUEUE_SIZE sqs;
|
||||||
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
sqs.InSize = insize;
|
sqs.InSize = insize;
|
||||||
sqs.OutSize = outsize;
|
sqs.OutSize = outsize;
|
||||||
return DeviceIoControl(handle, IOCTL_SERIAL_SET_QUEUE_SIZE,
|
return DeviceIoControl(handle, IOCTL_SERIAL_SET_QUEUE_SIZE,
|
||||||
&sqs, sizeof(sqs), NULL, 0, NULL, NULL);
|
&sqs, sizeof(sqs), NULL, 0, &dwBytesReturned, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -732,9 +738,10 @@ BOOL WINAPI SetupComm(HANDLE handle, DWORD insize, DWORD outsize)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI GetCommMask(HANDLE handle, LPDWORD evtmask)
|
BOOL WINAPI GetCommMask(HANDLE handle, LPDWORD evtmask)
|
||||||
{
|
{
|
||||||
|
DWORD dwBytesReturned;
|
||||||
TRACE("handle %p, mask %p\n", handle, evtmask);
|
TRACE("handle %p, mask %p\n", handle, evtmask);
|
||||||
return DeviceIoControl(handle, IOCTL_SERIAL_GET_WAIT_MASK,
|
return DeviceIoControl(handle, IOCTL_SERIAL_GET_WAIT_MASK,
|
||||||
NULL, 0, evtmask, sizeof(*evtmask), NULL, NULL);
|
NULL, 0, evtmask, sizeof(*evtmask), &dwBytesReturned, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -755,9 +762,10 @@ BOOL WINAPI GetCommMask(HANDLE handle, LPDWORD evtmask)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI SetCommMask(HANDLE handle, DWORD evtmask)
|
BOOL WINAPI SetCommMask(HANDLE handle, DWORD evtmask)
|
||||||
{
|
{
|
||||||
|
DWORD dwBytesReturned;
|
||||||
TRACE("handle %p, mask %x\n", handle, evtmask);
|
TRACE("handle %p, mask %x\n", handle, evtmask);
|
||||||
return DeviceIoControl(handle, IOCTL_SERIAL_SET_WAIT_MASK,
|
return DeviceIoControl(handle, IOCTL_SERIAL_SET_WAIT_MASK,
|
||||||
&evtmask, sizeof(evtmask), NULL, 0, NULL, NULL);
|
&evtmask, sizeof(evtmask), NULL, 0, &dwBytesReturned, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dump_dcb(const DCB* lpdcb)
|
static void dump_dcb(const DCB* lpdcb)
|
||||||
|
@ -797,6 +805,7 @@ BOOL WINAPI SetCommState( HANDLE handle, LPDCB lpdcb)
|
||||||
SERIAL_LINE_CONTROL slc;
|
SERIAL_LINE_CONTROL slc;
|
||||||
SERIAL_HANDFLOW shf;
|
SERIAL_HANDFLOW shf;
|
||||||
SERIAL_CHARS sc;
|
SERIAL_CHARS sc;
|
||||||
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
if (lpdcb == NULL)
|
if (lpdcb == NULL)
|
||||||
{
|
{
|
||||||
|
@ -858,13 +867,13 @@ BOOL WINAPI SetCommState( HANDLE handle, LPDCB lpdcb)
|
||||||
* so flow control does not interfere.
|
* so flow control does not interfere.
|
||||||
*/
|
*/
|
||||||
return (DeviceIoControl(handle, IOCTL_SERIAL_SET_BAUD_RATE,
|
return (DeviceIoControl(handle, IOCTL_SERIAL_SET_BAUD_RATE,
|
||||||
&sbr, sizeof(sbr), NULL, 0, NULL, NULL) &&
|
&sbr, sizeof(sbr), NULL, 0, &dwBytesReturned, NULL) &&
|
||||||
DeviceIoControl(handle, IOCTL_SERIAL_SET_LINE_CONTROL,
|
DeviceIoControl(handle, IOCTL_SERIAL_SET_LINE_CONTROL,
|
||||||
&slc, sizeof(slc), NULL, 0, NULL, NULL) &&
|
&slc, sizeof(slc), NULL, 0, &dwBytesReturned, NULL) &&
|
||||||
DeviceIoControl(handle, IOCTL_SERIAL_SET_HANDFLOW,
|
DeviceIoControl(handle, IOCTL_SERIAL_SET_HANDFLOW,
|
||||||
&shf, sizeof(shf), NULL, 0, NULL, NULL) &&
|
&shf, sizeof(shf), NULL, 0, &dwBytesReturned, NULL) &&
|
||||||
DeviceIoControl(handle, IOCTL_SERIAL_SET_CHARS,
|
DeviceIoControl(handle, IOCTL_SERIAL_SET_CHARS,
|
||||||
&sc, sizeof(sc), NULL, 0, NULL, NULL));
|
&sc, sizeof(sc), NULL, 0, &dwBytesReturned, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -891,6 +900,7 @@ BOOL WINAPI GetCommState(HANDLE handle, LPDCB lpdcb)
|
||||||
SERIAL_LINE_CONTROL slc;
|
SERIAL_LINE_CONTROL slc;
|
||||||
SERIAL_HANDFLOW shf;
|
SERIAL_HANDFLOW shf;
|
||||||
SERIAL_CHARS sc;
|
SERIAL_CHARS sc;
|
||||||
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
TRACE("handle %p, ptr %p\n", handle, lpdcb);
|
TRACE("handle %p, ptr %p\n", handle, lpdcb);
|
||||||
|
|
||||||
|
@ -901,13 +911,13 @@ BOOL WINAPI GetCommState(HANDLE handle, LPDCB lpdcb)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DeviceIoControl(handle, IOCTL_SERIAL_GET_BAUD_RATE,
|
if (!DeviceIoControl(handle, IOCTL_SERIAL_GET_BAUD_RATE,
|
||||||
NULL, 0, &sbr, sizeof(sbr), NULL, NULL) ||
|
NULL, 0, &sbr, sizeof(sbr), &dwBytesReturned, NULL) ||
|
||||||
!DeviceIoControl(handle, IOCTL_SERIAL_GET_LINE_CONTROL,
|
!DeviceIoControl(handle, IOCTL_SERIAL_GET_LINE_CONTROL,
|
||||||
NULL, 0, &slc, sizeof(slc), NULL, NULL) ||
|
NULL, 0, &slc, sizeof(slc), &dwBytesReturned, NULL) ||
|
||||||
!DeviceIoControl(handle, IOCTL_SERIAL_GET_HANDFLOW,
|
!DeviceIoControl(handle, IOCTL_SERIAL_GET_HANDFLOW,
|
||||||
NULL, 0, &shf, sizeof(shf), NULL, NULL) ||
|
NULL, 0, &shf, sizeof(shf), &dwBytesReturned, NULL) ||
|
||||||
!DeviceIoControl(handle, IOCTL_SERIAL_GET_CHARS,
|
!DeviceIoControl(handle, IOCTL_SERIAL_GET_CHARS,
|
||||||
NULL, 0, &sc, sizeof(sc), NULL, NULL))
|
NULL, 0, &sc, sizeof(sc), &dwBytesReturned, NULL))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
memset(lpdcb, 0, sizeof(*lpdcb));
|
memset(lpdcb, 0, sizeof(*lpdcb));
|
||||||
|
@ -980,8 +990,9 @@ BOOL WINAPI GetCommState(HANDLE handle, LPDCB lpdcb)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI TransmitCommChar(HANDLE hComm, CHAR chTransmit)
|
BOOL WINAPI TransmitCommChar(HANDLE hComm, CHAR chTransmit)
|
||||||
{
|
{
|
||||||
|
DWORD dwBytesReturned;
|
||||||
return DeviceIoControl(hComm, IOCTL_SERIAL_IMMEDIATE_CHAR,
|
return DeviceIoControl(hComm, IOCTL_SERIAL_IMMEDIATE_CHAR,
|
||||||
&chTransmit, sizeof(chTransmit), NULL, 0, NULL, NULL);
|
&chTransmit, sizeof(chTransmit), NULL, 0, &dwBytesReturned, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1002,6 +1013,7 @@ BOOL WINAPI TransmitCommChar(HANDLE hComm, CHAR chTransmit)
|
||||||
BOOL WINAPI GetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
|
BOOL WINAPI GetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
|
||||||
{
|
{
|
||||||
SERIAL_TIMEOUTS st;
|
SERIAL_TIMEOUTS st;
|
||||||
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
TRACE("(%p, %p)\n", hComm, lptimeouts);
|
TRACE("(%p, %p)\n", hComm, lptimeouts);
|
||||||
if (!lptimeouts)
|
if (!lptimeouts)
|
||||||
|
@ -1010,7 +1022,7 @@ BOOL WINAPI GetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (!DeviceIoControl(hComm, IOCTL_SERIAL_GET_TIMEOUTS,
|
if (!DeviceIoControl(hComm, IOCTL_SERIAL_GET_TIMEOUTS,
|
||||||
NULL, 0, &st, sizeof(st), NULL, NULL))
|
NULL, 0, &st, sizeof(st), &dwBytesReturned, NULL))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
lptimeouts->ReadIntervalTimeout = st.ReadIntervalTimeout;
|
lptimeouts->ReadIntervalTimeout = st.ReadIntervalTimeout;
|
||||||
lptimeouts->ReadTotalTimeoutMultiplier = st.ReadTotalTimeoutMultiplier;
|
lptimeouts->ReadTotalTimeoutMultiplier = st.ReadTotalTimeoutMultiplier;
|
||||||
|
@ -1043,6 +1055,7 @@ BOOL WINAPI GetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
|
||||||
BOOL WINAPI SetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
|
BOOL WINAPI SetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
|
||||||
{
|
{
|
||||||
SERIAL_TIMEOUTS st;
|
SERIAL_TIMEOUTS st;
|
||||||
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
TRACE("(%p, %p)\n", hComm, lptimeouts);
|
TRACE("(%p, %p)\n", hComm, lptimeouts);
|
||||||
|
|
||||||
|
@ -1058,7 +1071,7 @@ BOOL WINAPI SetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
|
||||||
st.WriteTotalTimeoutConstant = lptimeouts->WriteTotalTimeoutConstant;
|
st.WriteTotalTimeoutConstant = lptimeouts->WriteTotalTimeoutConstant;
|
||||||
|
|
||||||
return DeviceIoControl(hComm, IOCTL_SERIAL_SET_TIMEOUTS,
|
return DeviceIoControl(hComm, IOCTL_SERIAL_SET_TIMEOUTS,
|
||||||
&st, sizeof(st), NULL, 0, NULL, NULL);
|
&st, sizeof(st), NULL, 0, &dwBytesReturned, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -1078,8 +1091,9 @@ BOOL WINAPI SetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI GetCommModemStatus(HANDLE hFile, LPDWORD lpModemStat)
|
BOOL WINAPI GetCommModemStatus(HANDLE hFile, LPDWORD lpModemStat)
|
||||||
{
|
{
|
||||||
|
DWORD dwBytesReturned;
|
||||||
return DeviceIoControl(hFile, IOCTL_SERIAL_GET_MODEMSTATUS,
|
return DeviceIoControl(hFile, IOCTL_SERIAL_GET_MODEMSTATUS,
|
||||||
NULL, 0, lpModemStat, sizeof(DWORD), NULL, NULL);
|
NULL, 0, lpModemStat, sizeof(DWORD), &dwBytesReturned, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
Loading…
Reference in New Issue