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