Sample Code

Windows Driver Samples/ WPD WUDF sample driver/ C++/ WpdNetworkConfig.cpp/

#include "stdafx.h"
#include "WpdNetworkConfig.tmh"

WpdNetworkConfig::WpdNetworkConfig()
{

}

WpdNetworkConfig::~WpdNetworkConfig()
{

}

HRESULT WpdNetworkConfig::Initialize(_In_   FakeDevice *pFakeDevice)
{
    HRESULT hr = S_OK;

    if(pFakeDevice == NULL)
    {
        hr = E_POINTER;
        CHECK_HR(hr, "Cannot have NULL parameter");
        return hr;
    }
    m_pFakeDevice = pFakeDevice;
    return hr;
}


HRESULT WpdNetworkConfig::DispatchWpdMessage(_In_    REFPROPERTYKEY          Command,
                                             _In_    IPortableDeviceValues*  pParams,
                                             _In_    IPortableDeviceValues*  pResults)
{
    HRESULT hr = S_OK;

    if (hr == S_OK)
    {
        if (Command.fmtid != WPD_CATEGORY_NETWORK_CONFIGURATION)
        {
            hr = E_INVALIDARG;
            CHECK_HR(hr, "This object does not support this command category %ws",CComBSTR(Command.fmtid));
        }
    }

    if (hr == S_OK)
    {
        if(IsEqualPropertyKey(Command, WPD_COMMAND_PROCESS_WIRELESS_PROFILE))
        {
            hr = OnProcessWFCObject(pParams, pResults);
            CHECK_HR(hr, "Failed to commit WFC file");
        }
        else
        {
            hr = E_NOTIMPL;
            CHECK_HR(hr, "This object does not support this command id %d", Command.pid);
        }
    }
    return hr;
}



/**
 *  This method is called when we receive a WPD_COMMAND_PROCESS_WIRELESS_PROFILE
 *  command.
 *
 *  The parameters sent to us are:
 *  - WPD_PROPERTY_OBJECT_ID: identifies the object to process.
 *
 *  The driver should:
 *  -
 */
HRESULT WpdNetworkConfig::OnProcessWFCObject(
    _In_    IPortableDeviceValues*  pParams,
    _In_    IPortableDeviceValues*  pResults)
{
    HRESULT hr = S_OK;
    LPWSTR  pszObjectID = NULL;

    UNREFERENCED_PARAMETER(pResults);

    // Get the Object ID
    hr = pParams->GetStringValue(WPD_PROPERTY_OBJECT_PROPERTIES_OBJECT_ID, &pszObjectID);
    if (hr == S_OK)
    {
        FakeContent* pElement = NULL;

        // Check if the object exists
        if(m_pFakeDevice->GetContent(pszObjectID, &pElement))
        {
            // Check if the object is of the proper content type
            if (IsEqualGUID(pElement->ContentType, WPD_CONTENT_TYPE_WIRELESS_PROFILE))
            {
                BYTE Buffer[16];
                DWORD dwNumBytesRead = 0;

                // Perform minimal validation on the object contents (just read some bytes for this sample)
                hr = pElement->ReadData(WPD_RESOURCE_DEFAULT, 0, Buffer, sizeof(Buffer), &dwNumBytesRead);
                CHECK_HR(hr, "Failed to read resource data for %ws.%d", CComBSTR(WPD_RESOURCE_DEFAULT.fmtid), WPD_RESOURCE_DEFAULT.pid);
            }
            else
            {
                hr = E_INVALIDARG;
                CHECK_HR(hr, "Invalid ObjectID for OnProcessWFCObject [%ws]", pszObjectID);
            }
        }
        else
        {
            hr = E_INVALIDARG;
            CHECK_HR(hr, "Invalid ObjectID [%ws]", pszObjectID);
        }

        CoTaskMemFree(pszObjectID);
    }
    else
    {
        CHECK_HR(hr, "Missing or invalid value for WPD_PROPERTY_OBJECT_PROPERTIES_OBJECT_ID");
    }

    return hr;
}


Our Services

  • What our customers say about us?

© 2011-2024 All Rights Reserved. Joya Systems. 4425 South Mopac Building II Suite 101 Austin, TX 78735 Tel: 800-DEV-KERNEL

Privacy Policy. Terms of use. Valid XHTML & CSS