Christoph von Wittich : kernel32: DeviceIoControl: lpBytesReturned must not be NULL if lpOverlapped is NULL.
Alexandre Julliard
julliard at winehq.org
Fri Feb 6 09:55:38 CST 2009
Module: wine
Branch: master
Commit: 4192d34dd9694660df8de7303a53979e3e387f7a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4192d34dd9694660df8de7303a53979e3e387f7a
Author: Christoph von Wittich <Christoph at ApiViewer.de>
Date: Thu Feb 5 14:37:46 2009 +0100
kernel32: DeviceIoControl: lpBytesReturned must not be NULL if lpOverlapped is NULL.
---
dlls/kernel32/comm.c | 54 +++++++++++++++++++++++++++++++------------------
1 files changed, 34 insertions(+), 20 deletions(-)
diff --git a/dlls/kernel32/comm.c b/dlls/kernel32/comm.c
index d83eacb..0fbd7e3 100644
--- a/dlls/kernel32/comm.c
+++ b/dlls/kernel32/comm.c
@@ -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);
}
/***********************************************************************
More information about the wine-cvs
mailing list