18 #define WsTcLock() EnterCriticalSection(&Catalog->Lock) 19 #define WsTcUnlock() LeaveCriticalSection(&Catalog->Lock) 43 HKEY CatalogKey, NewKey;
57 "Current_Protocol_Catalog",
67 "Current_Protocol_Catalog",
102 RegSize =
sizeof(
DWORD);
112 "Num_Catalog_Entries",
127 "Next_Catalog_Entry_ID",
176 RegSize =
sizeof(
DWORD);
200 Catalog->CatalogKey = CatalogKey;
233 DWORD CatalogEntries;
235 DWORD NextCatalogEntry;
267 if (UniqueId == Catalog->UniqueId)
289 "Next_Catalog_Entry_ID",
292 (
LPBYTE)&NextCatalogEntry,
303 "Num_Catalog_Entries",
316 for (
i = 1;
i <= CatalogEntries;
i++)
353 Catalog->UniqueId = UniqueId;
354 Catalog->NextId = NextCatalogEntry;
368 }
while (NewChangesMade);
391 *CatalogEntry =
NULL;
397 NextEntry = Catalog->ProtocolList.
Flink;
398 while (NextEntry != &Catalog->ProtocolList)
402 NextEntry = NextEntry->
Flink;
408 if (!
Entry->Provider)
419 *CatalogEntry =
Entry;
446 NextEntry = Catalog->ProtocolList.
Flink;
447 while (NextEntry != &Catalog->ProtocolList)
451 NextEntry = NextEntry->
Flink;
457 if (!
Entry->Provider)
465 *CatalogEntry =
Entry;
493 *CatalogEntry =
NULL;
498 NextEntry = Catalog->ProtocolList.
Flink;
504 while (NextEntry != &Catalog->ProtocolList)
508 NextEntry = NextEntry->
Flink;
511 if (
Entry->ProtocolInfo.dwCatalogEntryId == StartId)
break;
516 while (NextEntry != &Catalog->ProtocolList)
520 NextEntry = NextEntry->
Flink;
523 if ((
Entry->ProtocolInfo.iAddressFamily == af) || (af ==
AF_UNSPEC))
526 if ((
Entry->ProtocolInfo.iSocketType ==
type) || (
type == 0))
530 ((
Entry->ProtocolInfo.iProtocol +
535 if (!
Entry->Provider)
546 *CatalogEntry =
Entry;
583 Entry = Catalog->ProtocolList.Flink;
584 while (
Entry != &Catalog->ProtocolList)
613 DPRINT(
"WsTcLoadProvider: %p, %p\n", Catalog, CatalogEntry);
619 if (!CatalogEntry->Provider)
623 &CatalogEntry->ProtocolInfo.ProviderId);
639 CatalogEntry->DllPath,
640 &CatalogEntry->ProtocolInfo);
688 while (
Entry != &TempList)
700 CatalogEntry = OldCatalogEntry;
704 Catalog->ItemCount--;
711 Catalog->ItemCount++;
722 Catalog->ItemCount--;
741 Entry = Catalog->ProtocolList.Flink;
742 while (GoOn && (
Entry != &Catalog->ProtocolList))
778 Entry = Catalog->ProtocolList.Flink;
779 while (
Entry != &Catalog->ProtocolList)
805 UniqueId = Catalog->UniqueId;
811 OptionLength =
sizeof(ProtocolInfo);
815 (
PCHAR)&ProtocolInfo,
825 if (UniqueId == Catalog->UniqueId)
continue;
857 Catalog->ItemCount--;
868 if (!Catalog->ProtocolList.Flink)
return;
874 Entry = Catalog->ProtocolList.Flink;
875 while (
Entry != &Catalog->ProtocolList)
885 Entry = Catalog->ProtocolList.Flink;
889 if (Catalog->CatalogKey)
893 Catalog->CatalogKey =
NULL;
DWORD WSAAPI WsTcGetEntryFromTriplet(IN PTCATALOG Catalog, IN INT af, IN INT type, IN INT protocol, IN DWORD StartId, IN PTCATALOG_ENTRY *CatalogEntry)
IN PCO_ADDRESS_FAMILY AddressFamily
VOID WSAAPI WsTpDereference(IN PTPROVIDER Provider)
_In_ NDIS_ERROR_CODE ErrorCode
BOOL WSAAPI WsTcOpen(IN PTCATALOG Catalog, IN HKEY ParentKey)
DWORD WSAAPI WsTcGetEntryFromCatalogEntryId(IN PTCATALOG Catalog, IN DWORD CatalogEntryId, IN PTCATALOG_ENTRY *CatalogEntry)
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
SOCKET WSPAPI WPUModifyIFSHandle(IN DWORD dwCatalogEntryId, IN SOCKET ProposedHandle, OUT LPINT lpErrno)
#define SO_PROTOCOL_INFOW
GLuint GLuint GLsizei GLenum type
PTPROVIDER WSAAPI WsTpAllocate(VOID)
#define REG_OPENED_EXISTING_KEY
#define InsertTailList(ListHead, Entry)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
VOID WSAAPI WsTcRemoveCatalogItem(IN PTCATALOG Catalog, IN PTCATALOG_ENTRY Entry)
DWORD WSAAPI WsTcLoadProvider(IN PTCATALOG Catalog, IN PTCATALOG_ENTRY CatalogEntry)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
#define WSAEPROTONOSUPPORT
VOID WSAAPI WsTcEntrySetProvider(IN PTCATALOG_ENTRY CatalogEntry, IN PTPROVIDER Provider)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
LONG WINAPI RegCloseKey(HKEY hKey)
DWORD WSAAPI WsTcFindIfsProviderForSocket(IN PTCATALOG Catalog, IN SOCKET Handle)
DWORD WSAAPI WsTpInitialize(IN PTPROVIDER Provider, IN LPSTR DllName, LPWSAPROTOCOL_INFOW ProtocolInfo)
INT WSAAPI WsSetupCatalogProtection(IN HKEY CatalogKey, IN HANDLE CatalogEvent, OUT LPDWORD UniqueId)
PTPROVIDER WSAAPI WsTcFindProvider(IN PTCATALOG Catalog, IN LPGUID ProviderId)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
#define REG_CREATED_NEW_KEY
#define ERROR_FILE_NOT_FOUND
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
VOID WSAAPI WsTcEnumerateCatalogItems(IN PTCATALOG Catalog, IN PTCATALOG_ENUMERATE_PROC Callback, IN PVOID Context)
#define REG_OPTION_NON_VOLATILE
struct _LIST_ENTRY * Flink
VOID WSAAPI WsTcEntryDereference(IN PTCATALOG_ENTRY CatalogEntry)
DWORD WSAAPI WsTcRefreshFromRegistry(IN PTCATALOG Catalog, IN HANDLE CatalogEvent)
PTCATALOG_ENTRY WSAAPI WsTcEntryAllocate(VOID)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
DWORD WSAAPI WsTcEntryInitializeFromRegistry(IN PTCATALOG_ENTRY CatalogEntry, IN HKEY, unsigned long)
#define WSAESOCKTNOSUPPORT
#define WSA_NOT_ENOUGH_MEMORY
WSAPROTOCOL_INFOW ProtocolInfo
BOOL WSAAPI WsCheckCatalogState(IN HANDLE Event)
VOID WSAAPI WsTcDelete(IN PTCATALOG Catalog)
DWORD WSAAPI WsTcInitializeFromRegistry(IN PTCATALOG Catalog, IN HKEY ParentKey, IN HANDLE CatalogEvent)
DWORD WSAAPI WsTcGetEntryFromAf(IN PTCATALOG Catalog, IN INT AddressFamily, IN PTCATALOG_ENTRY *CatalogEntry)
#define WSASYSCALLFAILURE
#define InterlockedIncrement
#define InitializeListHead(ListHead)
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
VOID WSAAPI WsTcUpdateProtocolList(IN PTCATALOG Catalog, IN PLIST_ENTRY List)
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT _In_ ULONG CreateDisposition
#define HeapFree(x, y, z)
base of all file and directory entries
PTCATALOG WSAAPI WsTcAllocate(VOID)
BOOL(WINAPI * PTCATALOG_ENUMERATE_PROC)(IN PVOID Context, IN PTCATALOG_ENTRY Entry)