VirtualBox

Changeset 62711 in vbox for trunk/src


Ignore:
Timestamp:
Jul 29, 2016 9:14:25 PM (8 years ago)
Author:
vboxsync
Message:

HostDrivers: warnings

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp

    r62709 r62711  
    11/* $Id$ */
    22/** @file
    3  * VBoxNetFltRt-win.cpp - Bridged Networking Driver, Windows Specific Code.
    4  * NetFlt Runtime
    5  */
     3 * VBoxNetFltRt-win.cpp - Bridged Networking Driver, Windows Specific Runtime Code.
     4 */
     5
    66/*
    77 * Copyright (C) 2011-2016 Oracle Corporation
     
    1515 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
    1616 */
     17
     18/*********************************************************************************************************************************
     19*   Header Files                                                                                                                 *
     20*********************************************************************************************************************************/
    1721#include "VBoxNetFltCmn-win.h"
    1822#include <VBox/intnetinline.h>
    1923#include <iprt/thread.h>
    2024
    21 RT_C_DECLS_BEGIN
    22 #include <tdikrnl.h>
    23 RT_C_DECLS_END
     25#include <iprt/nt/tdikrnl.h>
    2426#include <mstcpip.h>
    2527
     28
     29/*********************************************************************************************************************************
     30*   Structures and Typedefs                                                                                                      *
     31*********************************************************************************************************************************/
    2632/** represents the job element of the job queue
    2733 * see comments for VBOXNETFLT_JOB_QUEUE */
     
    7177#endif
    7278    NDIS_STATUS Status;
    73 }CREATE_INSTANCE_CONTEXT, *PCREATE_INSTANCE_CONTEXT;
     79} CREATE_INSTANCE_CONTEXT, *PCREATE_INSTANCE_CONTEXT;
    7480
    7581/*contexts used for our jobs */
     
    8187    bool fRediscovery;
    8288    int Status;
    83 }ATTACH_INFO, *PATTACH_INFO;
     89} ATTACH_INFO, *PATTACH_INFO;
    8490
    8591/* general worker context */
     
    8894    PVBOXNETFLTINS pNetFltIf;
    8995    int Status;
    90 }WORKER_INFO, *PWORKER_INFO;
     96} WORKER_INFO, *PWORKER_INFO;
    9197
    9298/* idc initialization */
     
    98104    volatile int rc;
    99105    KEVENT hCompletionEvent;
    100 }INIT_IDC_INFO, *PINIT_IDC_INFO;
    101 
    102 
    103 /** globals */
     106} INIT_IDC_INFO, *PINIT_IDC_INFO;
     107
     108
     109/*********************************************************************************************************************************
     110*   Global Variables                                                                                                             *
     111*********************************************************************************************************************************/
    104112/** global job queue. some operations are required to be done at passive level, e.g. thread creation, adapter bind/unbind initiation,
    105113 * while IntNet typically calls us APC_LEVEL, so we just create a system thread in our DriverEntry and enqueue the jobs to that thread */
     
    107115volatile static bool g_bVBoxIdcInitialized;
    108116INIT_IDC_INFO g_VBoxInitIdcInfo;
     117
    109118/**
    110119 * The (common) global data.
     
    114123VBOXNETFLTGLOBALS_WIN g_VBoxNetFltGlobalsWin = {0};
    115124
     125
     126/*********************************************************************************************************************************
     127*   Defined Constants And Macros                                                                                                 *
     128*********************************************************************************************************************************/
    116129#define LIST_ENTRY_2_JOB(pListEntry) \
    117130    ( (PVBOXNETFLT_JOB)((uint8_t *)(pListEntry) - RT_OFFSETOF(VBOXNETFLT_JOB, ListEntry)) )
    118131
     132
     133/*********************************************************************************************************************************
     134*   Internal Functions                                                                                                           *
     135*********************************************************************************************************************************/
    119136static int vboxNetFltWinAttachToInterface(PVBOXNETFLTINS pThis, void * pContext, bool fRediscovery);
    120137static int vboxNetFltWinConnectIt(PVBOXNETFLTINS pThis);
     
    126143static int vboxNetFltWinStopInitIdcProbing();
    127144
     145
     146
    128147/** makes the current thread to sleep for the given number of miliseconds */
    129148DECLHIDDEN(void) vboxNetFltWinSleep(ULONG milis)
     
    160179 */
    161180/* allocates and zeroes the nonpaged memory of a given size */
    162 DECLHIDDEN(NDIS_STATUS) vboxNetFltWinMemAlloc(PVOID* ppMemBuf, UINT cbLength)
     181DECLHIDDEN(NDIS_STATUS) vboxNetFltWinMemAlloc(PVOID *ppvMemBuf, UINT cbLength)
    163182{
    164183#ifdef DEBUG_NETFLT_USE_EXALLOC
    165     *ppMemBuf = ExAllocatePoolWithTag(NonPagedPool, cbLength, VBOXNETFLT_MEM_TAG);
    166     if (*ppMemBuf)
    167     {
    168         NdisZeroMemory(*ppMemBuf, cbLength);
     184    *ppvMemBuf = ExAllocatePoolWithTag(NonPagedPool, cbLength, VBOXNETFLT_MEM_TAG);
     185    if (*ppvMemBuf)
     186    {
     187        NdisZeroMemory(*ppvMemBuf, cbLength);
    169188        return NDIS_STATUS_SUCCESS;
    170189    }
    171190    return NDIS_STATUS_FAILURE;
    172191#else
    173     NDIS_STATUS fStatus = NdisAllocateMemoryWithTag(ppMemBuf, cbLength, VBOXNETFLT_MEM_TAG);
     192    NDIS_STATUS fStatus = NdisAllocateMemoryWithTag(ppvMemBuf, cbLength, VBOXNETFLT_MEM_TAG);
    174193    if (fStatus == NDIS_STATUS_SUCCESS)
    175     {
    176         NdisZeroMemory(*ppMemBuf, cbLength);
    177     }
     194        NdisZeroMemory(*ppvMemBuf, cbLength);
    178195    return fStatus;
    179196#endif
     
    273290static NDIS_STATUS vboxNetFltWinNdisBufferMoveToSG0(PNDIS_BUFFER pBuffer, PINTNETSG pSG)
    274291{
    275     UINT cSegs = 0;
    276292    PINTNETSEG paSeg;
    277293    uint8_t * ptr;
     
    547563        PNDIS_BUFFER pCurrentBuffer = NULL;
    548564        UINT cBufferCount;
    549         UINT uBytesCopied = 0;
    550565        UINT cbPacketLength;
    551566
     
    13991414    return NDIS_STATUS_NOT_SUPPORTED;
    14001415}
    1401 #else /* if defined VBOXNETADP */
     1416
     1417#else /* VBOXNETADP */
    14021418
    14031419/**
     
    14421458}
    14431459
    1444 static int vboxNetFltWinWchar2Int(WCHAR c, uint8_t * pv)
     1460static int vboxNetFltWinWchar2Byte(WCHAR c, uint8_t *pb)
    14451461{
    14461462    if (c >= L'A' && c <= L'F')
    1447     {
    1448         *pv = (c - L'A') + 10;
    1449     }
     1463        *pb = (c - L'A') + 10;
    14501464    else if (c >= L'a' && c <= L'f')
    1451     {
    1452         *pv = (c - L'a') + 10;
    1453     }
     1465        *pb = (c - L'a') + 10;
    14541466    else if (c >= L'0' && c <= L'9')
    1455     {
    1456         *pv = (c - L'0');
    1457     }
     1467        *pb = (c - L'0');
    14581468    else
    1459     {
    14601469        return VERR_INVALID_PARAMETER;
    1461     }
    14621470    return VINF_SUCCESS;
    14631471}
     
    14651473DECLHIDDEN(int) vboxNetFltWinMACFromNdisString(RTMAC *pMac, PNDIS_STRING pNdisString)
    14661474{
    1467     int i, rc;
    1468     PWSTR pString;
    14691475
    14701476    /* validate parameters */
     
    14731479    AssertReturn(pNdisString->Length >= 12*sizeof(pNdisString->Buffer[0]), VERR_INVALID_PARAMETER);
    14741480
    1475     pString = pNdisString->Buffer;
    1476 
    1477     for (i = 0; i < 6; i++)
     1481    int rc = VINF_SUCCESS;
     1482    PWSTR pString = pNdisString->Buffer;
     1483    for (int i = 0; i < 6; i++)
    14781484    {
    14791485        uint8_t v1, v2;
    1480         rc = vboxNetFltWinWchar2Int(pString[0], &v1);
     1486        rc = vboxNetFltWinWchar2Byte(pString[0], &v1);
    14811487        if (RT_FAILURE(rc))
    1482         {
    14831488            break;
    1484         }
    1485 
    1486         rc = vboxNetFltWinWchar2Int(pString[1], &v2);
     1489
     1490        rc = vboxNetFltWinWchar2Byte(pString[1], &v2);
    14871491        if (RT_FAILURE(rc))
    1488         {
    14891492            break;
    1490         }
    14911493
    14921494        pMac->au8[i] = (v1 << 4) | v2;
     
    14981500}
    14991501
    1500 #endif
     1502#endif /* VBOXNETADP */
     1503
    15011504/**
    15021505 * creates a NDIS_PACKET from the PINTNETSG
     
    17621765//#endif
    17631766                }
     1767#ifndef VBOXNETADP /* unreachable for VBOXNETADP because of the above return */
    17641768                vboxNetFltWinMpDeregister(&g_VBoxNetFltGlobalsWin.Mp);
    1765 #ifndef VBOXNETADP
     1769# ifndef VBOXNETADP
    17661770                NdisFreeSpinLock(&g_VBoxNetFltGlobalsWin.lockFilters);
    1767 #endif /* VBOXNETADP */
     1771# endif
     1772#endif
    17681773            }
    17691774            vboxNetFltWinJobFiniQueue(&g_VBoxJobQueue);
     
    19611966    int rc;
    19621967#endif
    1963     BOOLEAN bCallFiniOnFail = FALSE;
    19641968
    19651969    LogFlowFunc(("ENTER: pWinIf 0x%p\n", pWinIf));
     
    20242028                            return NDIS_STATUS_SUCCESS;
    20252029#ifndef VBOXNETADP
    2026                             vboxNetFltWinMemFree(pWinIf->MpDeviceName.Buffer);
     2030                            // unreachable: vboxNetFltWinMemFree(pWinIf->MpDeviceName.Buffer);
    20272031                        }
    20282032                        RTSemFastMutexDestroy(pWinIf->hSynchRequestMutex);
    20292033                    }
    20302034                    else
    2031                     {
    20322035                        Status = NDIS_STATUS_FAILURE;
    2033                     }
    20342036                    NdisFreePacketPool(pWinIf->hSendPacketPool);
    20352037                }
    20362038                NdisFreeBufferPool(pWinIf->hSendBufferPool);
    20372039            }
    2038 #endif
    20392040            NdisFreeBufferPool(pWinIf->hRecvBufferPool);
     2041#endif
    20402042        }
    20412043        NdisFreePacketPool(pWinIf->hRecvPacketPool);
     
    21482150    PNDIS_BUFFER pBuffer1;
    21492151    UINT uTotalPacketLength1;
    2150     uint8_t* pMemBuf1;
     2152    uint8_t *pbMemBuf1 = NULL;
    21512153    UINT cbLength1 = 0;
    21522154
     
    21542156    PNDIS_BUFFER pBuffer2;
    21552157    UINT uTotalPacketLength2;
    2156     uint8_t* pMemBuf2;
     2158    uint8_t *pbMemBuf2 = NULL;
    21572159    UINT cbLength2 = 0;
    21582160    bool bMatch = true;
     
    21932195            if (!cbLength1)
    21942196            {
    2195                 NdisQueryBufferSafe(pBuffer1, &pMemBuf1, &cbLength1, NormalPagePriority);
     2197                NdisQueryBufferSafe(pBuffer1, &pbMemBuf1, &cbLength1, NormalPagePriority);
    21962198                NdisGetNextBuffer(pBuffer1, &pBuffer1);
    21972199            }
    21982200            else
    21992201            {
    2200                 Assert(pMemBuf1);
     2202                Assert(pbMemBuf1);
    22012203                Assert(ucbLength2Match);
    2202                 pMemBuf1 += ucbLength2Match;
     2204                pbMemBuf1 += ucbLength2Match;
    22032205            }
    22042206
    22052207            if (!cbLength2)
    22062208            {
    2207                 NdisQueryBufferSafe(pBuffer2, &pMemBuf2, &cbLength2, NormalPagePriority);
     2209                NdisQueryBufferSafe(pBuffer2, &pbMemBuf2, &cbLength2, NormalPagePriority);
    22082210                NdisGetNextBuffer(pBuffer2, &pBuffer2);
    22092211            }
    22102212            else
    22112213            {
    2212                 Assert(pMemBuf2);
     2214                Assert(pbMemBuf2);
    22132215                Assert(ucbLength2Match);
    2214                 pMemBuf2 += ucbLength2Match;
     2216                pbMemBuf2 += ucbLength2Match;
    22152217            }
    22162218
     
    22182220            ucbLength2Match = MIN(ucbLength2Match, cbLength2);
    22192221
    2220             if (memcmp((PVOID*)pMemBuf1, (PVOID*)pMemBuf2, ucbLength2Match))
     2222            if (memcmp(pbMemBuf1, pbMemBuf2, ucbLength2Match))
    22212223            {
    22222224                bMatch = false;
     
    22532255    PNDIS_BUFFER pBuffer1;
    22542256    UINT uTotalPacketLength1;
    2255     uint8_t* pMemBuf1;
     2257    uint8_t *pbMemBuf1 = NULL;
    22562258    UINT cbLength1 = 0;
    22572259    UINT uTotalPacketLength2 = pSG->cbTotal;
    2258     uint8_t* pMemBuf2;
     2260    uint8_t *pbMemBuf2 = NULL;
    22592261    UINT cbLength2 = 0;
    22602262    bool bMatch = true;
     
    22932295            if (!cbLength1)
    22942296            {
    2295                 NdisQueryBufferSafe(pBuffer1, &pMemBuf1, &cbLength1, NormalPagePriority);
     2297                NdisQueryBufferSafe(pBuffer1, &pbMemBuf1, &cbLength1, NormalPagePriority);
    22962298                NdisGetNextBuffer(pBuffer1, &pBuffer1);
    22972299            }
    22982300            else
    22992301            {
    2300                 Assert(pMemBuf1);
     2302                Assert(pbMemBuf1);
    23012303                Assert(ucbLength2Match);
    2302                 pMemBuf1 += ucbLength2Match;
     2304                pbMemBuf1 += ucbLength2Match;
    23032305            }
    23042306
     
    23062308            {
    23072309                Assert(i < pSG->cSegsUsed);
    2308                 pMemBuf2 = (uint8_t*)pSG->aSegs[i].pv;
     2310                pbMemBuf2 = (uint8_t*)pSG->aSegs[i].pv;
    23092311                cbLength2 = pSG->aSegs[i].cb;
    23102312                i++;
     
    23122314            else
    23132315            {
    2314                 Assert(pMemBuf2);
     2316                Assert(pbMemBuf2);
    23152317                Assert(ucbLength2Match);
    2316                 pMemBuf2 += ucbLength2Match;
     2318                pbMemBuf2 += ucbLength2Match;
    23172319            }
    23182320
     
    23202322            ucbLength2Match = MIN(ucbLength2Match, cbLength2);
    23212323
    2322             if (memcmp((PVOID*)pMemBuf1, (PVOID*)pMemBuf2, ucbLength2Match))
     2324            if (memcmp(pbMemBuf1, pbMemBuf2, ucbLength2Match))
    23232325            {
    23242326                bMatch = false;
     
    23522354{
    23532355    UINT uTotalPacketLength1 = pSG1->cbTotal;
    2354     PVOID pMemBuf1;
     2356    PVOID pbMemBuf1 = NULL;
    23552357    UINT cbLength1 = 0;
    23562358    UINT i1 = 0;
    23572359    UINT uTotalPacketLength2 = pSG2->cbTotal;
    2358     PVOID pMemBuf2;
     2360    PVOID pbMemBuf2 = NULL;
    23592361    UINT cbLength2 = 0;
    23602362
     
    23932395            {
    23942396                Assert(i1 < pSG1->cSegsUsed);
    2395                 pMemBuf1 = pSG1->aSegs[i1].pv;
     2397                pbMemBuf1 = pSG1->aSegs[i1].pv;
    23962398                cbLength1 = pSG1->aSegs[i1].cb;
    23972399                i1++;
     
    24012403            {
    24022404                Assert(i2 < pSG2->cSegsUsed);
    2403                 pMemBuf2 = pSG2->aSegs[i2].pv;
     2405                pbMemBuf2 = pSG2->aSegs[i2].pv;
    24042406                cbLength2 = pSG2->aSegs[i2].cb;
    24052407                i2++;
     
    24092411            ucbLength2Match = MIN(ucbLength2Match, cbLength2);
    24102412
    2411             if (memcmp(pMemBuf1, pMemBuf2, ucbLength2Match))
     2413            if (memcmp(pbMemBuf1, pbMemBuf2, ucbLength2Match))
    24122414            {
    24132415                bMatch = false;
     
    26772679#ifndef VBOXNETFLT_NO_PACKET_QUEUE
    26782680    vboxNetFltWinQuFiniPacketQueue(pInstance);
     2681#else
     2682    RT_NOREF1(pInstance);
    26792683#endif
    26802684    return NDIS_STATUS_SUCCESS;
     
    27762780    return false;
    27772781#else
     2782    RT_NOREF1(pThis);
    27782783    return true;
    27792784#endif
     
    28372842                /* rediscovery means adaptor bind is performed while intnet is already using it
    28382843                 * i.e. adaptor was unbound while being used by intnet and now being bound back again */
    2839                 Assert(((VBOXNETFTLINSSTATE)ASMAtomicUoReadU32((uint32_t volatile *)&pThis->enmState)) == kVBoxNetFltInsState_Connected);
     2844                Assert(   ((VBOXNETFTLINSSTATE)ASMAtomicUoReadU32((uint32_t volatile *)&pThis->enmState))
     2845                       == kVBoxNetFltInsState_Connected);
    28402846            }
    28412847#ifndef VBOXNETADP
     
    28562862                {
    28572863                    if (!pAttachInfo->fRediscovery)
    2858                     {
    28592864                        vboxNetFltWinDrvReference();
    2860                     }
    28612865#ifndef VBOXNETADP
    28622866                    if (pThis->u.s.WinIf.OpenCloseStatus == NDIS_STATUS_SUCCESS)
     
    28842888                        return;
    28852889                    }
     2890#ifndef VBOXNETADP /* unreachable for VBOXNETADP because of the return above */
    28862891                    AssertBreakpoint();
    28872892
     
    28902895                        vboxNetFltWinDrvDereference();
    28912896                    }
    2892 #ifndef VBOXNETADP
     2897# ifndef VBOXNETADP
    28932898                    vboxNetFltWinPtDoUnbinding(pThis, true);
    2894 #else
    2895                     vboxNetFltWinMpDoDeinitialization(pThis);
     2899/*# else - unreachable
     2900                    vboxNetFltWinMpDoDeinitialization(pThis); */
     2901# endif
    28962902#endif
    28972903                }
     
    29452951static NTSTATUS vboxNetFltWinPtDevDispatch(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp)
    29462952{
     2953    RT_NOREF1(pDevObj);
    29472954    PIO_STACK_LOCATION pIrpSl = IoGetCurrentIrpStackLocation(pIrp);;
    29482955    NTSTATUS Status = STATUS_SUCCESS;
     
    30923099int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *pvIfData, PINTNETSG pSG, uint32_t fDst)
    30933100{
     3101    RT_NOREF1(pvIfData);
    30943102    int rc = VINF_SUCCESS;
    30953103    uint32_t cRefs = 0;
    30963104#ifndef VBOXNETADP
    30973105    if (fDst & INTNETTRUNKDIR_WIRE)
    3098     {
    30993106        cRefs++;
    3100     }
    31013107    if (fDst & INTNETTRUNKDIR_HOST)
    3102     {
    31033108        cRefs++;
    3104     }
    31053109#else
    3106     if (fDst & INTNETTRUNKDIR_WIRE || fDst & INTNETTRUNKDIR_HOST)
    3107     {
     3110    if ((fDst & INTNETTRUNKDIR_WIRE) || (fDst & INTNETTRUNKDIR_HOST))
    31083111        cRefs = 1;
    3109     }
    31103112#endif
    31113113
     
    31443146#if defined(DEBUG_NETFLT_PACKETS) || !defined(VBOX_LOOPBACK_USEFLAGS)
    31453147                /* the status is NOT pending, complete the packet */
    3146                 bool bTmp = vboxNetFltWinLbRemoveSendPacket(pThis, pPacket);
    3147                 Assert(bTmp);
     3148                bool fTmp = vboxNetFltWinLbRemoveSendPacket(pThis, pPacket);
     3149                Assert(fTmp); NOREF(fTmp);
    31483150#endif
    31493151                if (!NT_SUCCESS(fStatus))
    3150                 {
    3151                     /* TODO: convert status to VERR_xxx */
    3152                     rc = VERR_GENERAL_FAILURE;
    3153                 }
     3152                    rc = VERR_GENERAL_FAILURE; /** @todo convert status to VERR_xxx */
    31543153
    31553154                vboxNetFltWinFreeSGNdisPacket(pPacket, true);
     
    34113410                                    PTDI_PNP_CONTEXT Context)
    34123411{
     3412    RT_NOREF2(DeviceName, Context);
    34133413    vboxNetFltWinNotifyHostAddress(Address, true);
    34143414}
     
    34183418                                    PTDI_PNP_CONTEXT Context)
    34193419{
     3420    RT_NOREF2(DeviceName, Context);
    34203421    vboxNetFltWinNotifyHostAddress(Address, false);
    34213422}
     
    34443445            Assert(!g_VBoxNetFltGlobalsWin.hNotifier);
    34453446            NTSTATUS Status = TdiRegisterPnPHandlers(&Info, sizeof(Info), &g_VBoxNetFltGlobalsWin.hNotifier);
    3446             Log2(("vboxNetFltWinRegisterIpAddrNotifier: TdiRegisterPnPHandlers returned %d\n", Status));
     3447            Log2(("vboxNetFltWinRegisterIpAddrNotifier: TdiRegisterPnPHandlers returned %d\n", Status)); NOREF(Status);
    34473448        }
    34483449        else
     
    34873488            NTSTATUS Status = TdiDeregisterPnPHandlers(hNotifier);
    34883489            Log2(("vboxNetFltWinUnregisterIpAddrNotifier: TdiDeregisterPnPHandlers(%p) returned %d\n",
    3489                   hNotifier, Status));
     3490                  hNotifier, Status)); NOREF(Status);
    34903491        }
    34913492        else
     
    36123613void vboxNetFltPortOsNotifyMacAddress(PVBOXNETFLTINS pThis, void *pvIfData, PCRTMAC pMac)
    36133614{
     3615    RT_NOREF3(pThis, pvIfData, pMac);
    36143616}
    36153617
     
    36173619{
    36183620    /* Nothing to do */
     3621    RT_NOREF3(pThis, pvIf, ppvIfData);
    36193622    return VINF_SUCCESS;
    36203623}
     
    36233626{
    36243627    /* Nothing to do */
     3628    RT_NOREF2(pThis, pvIfData);
    36253629    return VINF_SUCCESS;
    36263630}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette