kernel32: DeviceIoControl: lpBytesReturned must not be NULL if lpOverlapped is NULL.

This commit is contained in:
Christoph von Wittich 2009-02-05 14:37:46 +01:00 committed by Alexandre Julliard
parent e01452bf45
commit 4192d34dd9
1 changed files with 34 additions and 20 deletions

View File

@ -551,7 +551,8 @@ BOOL WINAPI BuildCommDCBW(
*/
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)
{
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)
{
DWORD ioc;
DWORD dwBytesReturned;
switch (func)
{
@ -612,7 +615,7 @@ BOOL WINAPI EscapeCommFunction(HANDLE handle, UINT func)
SetLastError(ERROR_INVALID_PARAMETER);
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)
{
DWORD dwBytesReturned;
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)
{
SERIAL_STATUS ss;
DWORD dwBytesReturned;
if (!DeviceIoControl(handle, IOCTL_SERIAL_GET_COMMSTATUS, NULL, 0,
&ss, sizeof(ss), NULL, NULL))
&ss, sizeof(ss), &dwBytesReturned, NULL))
return FALSE;
if (errors)
@ -708,11 +713,12 @@ BOOL WINAPI ClearCommError(HANDLE handle, LPDWORD errors, LPCOMSTAT lpStat)
BOOL WINAPI SetupComm(HANDLE handle, DWORD insize, DWORD outsize)
{
SERIAL_QUEUE_SIZE sqs;
DWORD dwBytesReturned;
sqs.InSize = insize;
sqs.OutSize = outsize;
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)
{
DWORD dwBytesReturned;
TRACE("handle %p, mask %p\n", handle, evtmask);
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)
{
DWORD dwBytesReturned;
TRACE("handle %p, mask %x\n", handle, evtmask);
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)
@ -797,6 +805,7 @@ BOOL WINAPI SetCommState( HANDLE handle, LPDCB lpdcb)
SERIAL_LINE_CONTROL slc;
SERIAL_HANDFLOW shf;
SERIAL_CHARS sc;
DWORD dwBytesReturned;
if (lpdcb == NULL)
{
@ -858,13 +867,13 @@ BOOL WINAPI SetCommState( HANDLE handle, LPDCB lpdcb)
* so flow control does not interfere.
*/
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,
&slc, sizeof(slc), NULL, 0, NULL, NULL) &&
&slc, sizeof(slc), NULL, 0, &dwBytesReturned, NULL) &&
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,
&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_HANDFLOW shf;
SERIAL_CHARS sc;
DWORD dwBytesReturned;
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,
NULL, 0, &sbr, sizeof(sbr), NULL, NULL) ||
NULL, 0, &sbr, sizeof(sbr), &dwBytesReturned, NULL) ||
!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,
NULL, 0, &shf, sizeof(shf), NULL, NULL) ||
NULL, 0, &shf, sizeof(shf), &dwBytesReturned, NULL) ||
!DeviceIoControl(handle, IOCTL_SERIAL_GET_CHARS,
NULL, 0, &sc, sizeof(sc), NULL, NULL))
NULL, 0, &sc, sizeof(sc), &dwBytesReturned, NULL))
return FALSE;
memset(lpdcb, 0, sizeof(*lpdcb));
@ -980,8 +990,9 @@ BOOL WINAPI GetCommState(HANDLE handle, LPDCB lpdcb)
*/
BOOL WINAPI TransmitCommChar(HANDLE hComm, CHAR chTransmit)
{
DWORD dwBytesReturned;
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)
{
SERIAL_TIMEOUTS st;
DWORD dwBytesReturned;
TRACE("(%p, %p)\n", hComm, lptimeouts);
if (!lptimeouts)
@ -1010,7 +1022,7 @@ BOOL WINAPI GetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
return FALSE;
}
if (!DeviceIoControl(hComm, IOCTL_SERIAL_GET_TIMEOUTS,
NULL, 0, &st, sizeof(st), NULL, NULL))
NULL, 0, &st, sizeof(st), &dwBytesReturned, NULL))
return FALSE;
lptimeouts->ReadIntervalTimeout = st.ReadIntervalTimeout;
lptimeouts->ReadTotalTimeoutMultiplier = st.ReadTotalTimeoutMultiplier;
@ -1043,6 +1055,7 @@ BOOL WINAPI GetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
BOOL WINAPI SetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
{
SERIAL_TIMEOUTS st;
DWORD dwBytesReturned;
TRACE("(%p, %p)\n", hComm, lptimeouts);
@ -1058,7 +1071,7 @@ BOOL WINAPI SetCommTimeouts(HANDLE hComm, LPCOMMTIMEOUTS lptimeouts)
st.WriteTotalTimeoutConstant = lptimeouts->WriteTotalTimeoutConstant;
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)
{
DWORD dwBytesReturned;
return DeviceIoControl(hFile, IOCTL_SERIAL_GET_MODEMSTATUS,
NULL, 0, lpModemStat, sizeof(DWORD), NULL, NULL);
NULL, 0, lpModemStat, sizeof(DWORD), &dwBytesReturned, NULL);
}
/***********************************************************************