Пример #1
0
VOID
WSAAPI
WsNcEntryDelete(IN PNSCATALOG_ENTRY CatalogEntry)
{
    /* Check if a provider is loaded */
    if (CatalogEntry->Provider)
    {
        /* Dereference it too */
        WsNpDereference(CatalogEntry->Provider);
        CatalogEntry->Provider = NULL;
    }

    /* Delete us */
    HeapFree(WsSockHeap, 0, CatalogEntry);
}
Пример #2
0
VOID
WSAAPI
WsNqProvDelete(IN PNSQUERY_PROVIDER QueryProvider)
{
    /* Check if we have a provider */
    if (QueryProvider->Provider)
    {
        /* Dereference it */
        WsNpDereference(QueryProvider->Provider);

        /* Clear it */
        QueryProvider->Provider = NULL;
    }

    /* Delete us */
    HeapFree(WsSockHeap, 0, QueryProvider);
}
Пример #3
0
INT
WSAAPI
WsNcLoadProvider(IN PNSCATALOG Catalog,
                 IN PNSCATALOG_ENTRY CatalogEntry)
{
    INT ErrorCode = ERROR_SUCCESS;
    PNS_PROVIDER Provider;

    /* Lock the catalog */
    WsNcLock();

    /* Check if we have a provider already */
    if (!CatalogEntry->Provider)
    {
        /* Allocate a provider */
        if ((Provider = WsNpAllocate()))
        {
            /* Initialize it */
            ErrorCode = WsNpInitialize(Provider,
                                       CatalogEntry->DllPath,
                                       &CatalogEntry->ProviderId);

            /* Ensure success */
            if (ErrorCode == ERROR_SUCCESS)
            {
                /* Set the provider */
                WsNcEntrySetProvider(CatalogEntry, Provider);
            }

            /* Dereference it */
            WsNpDereference(Provider);
        }
        else
        {
            /* No memory */
            ErrorCode = WSA_NOT_ENOUGH_MEMORY;
        }
    }

    /* Release the lock */
    WsNcUnlock();
    return ErrorCode;
}