Share via


Using GetNPPBlobTable

The following example shows how to use the GetNPPBlobTable function to retrieve a NPP BLOB table that represents the registered network interface cards on the local computer.

DWORD rc;
PBLOB_TABLE pBlobTable;
// Create the filter blob
HBLOB hFilterBlob;
if (NMERR_SUCCESS != (rc = CreateBlob(&hFilterBlob)))
    return FALSE;

// Set test criteria
// To obtain delayed capture interface
if (NMERR_SUCCESS != (rc = SetBoolInBlob (
                      hFilterBlob,
                                 OWNER_NPP,
                                 CATEGORY_CONFIG,
                            TAG_INTERFACE_DELAYED_CAPTURE,
                                 TRUE)))
    return FALSE;

// Only obtain Ethernet cards
if (NMERR_SUCCESS != (rc = SetStringInBlob(hBlob,
                               OWNER_NPP,
                              CATEGORY_NETWORKINFO,
                                 TAG_MACTYPE,
                                 PROTOCOL_STRING_ETHERNET_TXT)))
    return FALSE;

// To get SpecialBlobs back
if (NMERR_SUCCESS != (rc = SetBoolInBlob(hBlob,
                               OWNER_NPP,
                              CATEGORY_FINDER,
TAG_GET_SPECIAL_BLOBS,
                                 TRUE)))
    return FALSE;

// Make the call to the finder
rc = GetNPPBlobTable(    hFilterBlob, 
                         &pBlobTable);

// Did we get anything?
if (rc != NMERR_SUCCESS)
    return FALSE;


//  To obtain a "special" blob.
//  Should have set
//  the filter blob to include the TAG_INTERFACE_REMOTE
//  interface – then only a TAG_INTERFACE_REMOTE interface
//  would return.

HBLOB OurBlob = NULL;
DWORD index;
for (index = 0; index < pBlobTable->dwNumBlobs; index++)
{
// Here is the test for a special blob
if (NMERR_SUCCESS == 
 (rc = GetStringFromBlob(pBlobTable->Blobs[index],
                           OWNER_NPP,
                           CATEGORY_FINDER,
                           TAG_DLL_FILENAME,
                           &DLLFileName)))
{
       // this is a special blob.
       // Check to see if it is supports the remote interface.
        BOOL bGoesRemote;
rc = GetBoolFromBlob( hBlob,
                           OWNER_NPP,
                           CATEGORY_CONFIG,
                           TAG_INTERFACE_DELAYED_CAPTURE,
&bGoesRemote);
        if (rc == NMERR_SUCCESS && bGoesRemote)
        {
             // This is the one we want
             // Save it off
             OurBlob = pBlobTable->Blobs[index];
             break;
        }
}
if (OurBlob == NULL)
        return FALSE;

// Set the computer name in our special blob.
rc = SetStringInBlob(OurBlob,
                     OWNER_NPP,
                     CATEGORY_LOCATION,
                     TAG_REMOTE_MACHINE_NAME,
                     "mycomputer");

PBLOB_TABLE pSecondBlobTable;
// Call the finder again.
rc = GetNPPBlobTable(        OurBlob, 
                                & pSecondBlobTable);

// Did we get anything?
if (rc != NMERR_SUCCESS)
        return FALSE;

// A Blob is now on mycomputer.
// Use the blob as shown in the previous example.