Struktur Data Resolusi Nama

Ada beberapa struktur data penting yang digunakan secara ekstensif di seluruh fungsi resolusi nama.

Struktur WSAQUERYSET digunakan untuk membentuk kueri untuk WSALookupServiceBegin, dan digunakan untuk mengirimkan hasil kueri untuk WSALookupServiceNext. Ini adalah struktur yang kompleks karena berisi pointer ke beberapa struktur lain, beberapa di antaranya mereferensikan masih struktur lain. Hubungan antara struktur WSAQUERYSET dan struktur yang direferensikannya diilustrasikan sebagai berikut.

hubungan antara wsaqueryset dan struktur terkait

Dalam struktur WSAQUERYSET , sebagian besar anggota adalah penjelasan mandiri, tetapi beberapa layak mendapatkan penjelasan tambahan. Anggota dwSize harus selalu diisi dengan sizeof (WSAQUERYSET), karena ini digunakan oleh penyedia namespace layanan untuk mendeteksi dan beradaptasi dengan versi struktur WSAQUERYSET yang berbeda yang mungkin muncul dari waktu ke waktu.

Anggota dwOutputFlags digunakan oleh penyedia namespace layanan untuk memberikan informasi tambahan tentang hasil kueri. Untuk detailnya, lihat fungsi WSALookupServiceNext .

Struktur WSAECOMPARATOR yang direferensikan oleh anggota lpversion digunakan untuk batasan dan hasil kueri. Untuk kueri, anggota dwVersion menunjukkan versi layanan yang diinginkan. Anggota ecHow adalah jenis enumerasi yang menentukan bagaimana perbandingan dapat dibuat. Pilihannya adalah COMP_EQUALS yang mengharuskan kecocokan persis dalam versi terjadi, atau COMP_NOTLESS yang menentukan bahwa nomor versi layanan tidak kurang dari nilai anggota dwVersion .

Interpretasi dwNameSpace dan lpNSProviderId tergantung pada bagaimana struktur digunakan dan dijelaskan lebih lanjut dalam deskripsi fungsi individual yang menggunakan struktur ini.

Anggota lpszContext berlaku untuk namespace hierarkis, dan menentukan titik awal kueri atau lokasi dalam hierarki tempat layanan berada. Aturan umumnya adalah:

  • Nilai NULL, kosong ("") memulai pencarian pada konteks default.
  • Nilai "\" memulai pencarian di bagian atas namespace.
  • Nilai lain memulai pencarian pada titik yang ditunjuk.

Penyedia yang tidak mendukung penahanan dapat mengembalikan kesalahan jika ada selain "" atau "\" yang ditentukan. Penyedia yang mendukung penahanan terbatas, seperti grup, harus menerima "", '\", atau titik yang ditunjuk. Konteks adalah namespace layanan khusus. Jika anggota dwNameSpace NS_ALL, maka hanya "" atau "\" yang harus diteruskan sebagai konteks karena ini dikenali oleh semua namespace.

Anggota lpszQueryString digunakan untuk menyediakan informasi kueri tambahan khusus namespace seperti string yang menjelaskan nama protokol layanan dan transportasi terkenal, seperti dalam "FTP/TCP".

Struktur AFPROTOCOLS yang dirujuk oleh anggota lpafpProtocols hanya digunakan untuk tujuan kueri, dan menyediakan daftar protokol untuk membatasi kueri. Protokol ini direpresentasikan sebagai pasangan (keluarga alamat, protokol), karena nilai protokol hanya memiliki arti dalam konteks keluarga alamat.

Array struktur CSADDR_INFO yang dirujuk oleh anggota lpcsaBuffer berisi semua informasi yang diperlukan untuk digunakan layanan dalam membuat mendengarkan, atau untuk digunakan klien dalam membuat koneksi ke layanan. Anggota LocalAddr dan RemoteAddr keduanya secara langsung berisi struktur SOCKET_ADDRESS .

Layanan akan membuat soket dengan memanggil fungsi soket atau WSASocket menggunakan tuple LocalAddr.lpSockaddr-sa_family>, iSocketType, dan iProtocol sebagai parameter. Layanan akan mengikat soket ke alamat lokal dengan memanggil fungsi pengikatan menggunakan LocalAddr.lpSockaddr dan LocalAddr.lpSockaddrLength sebagai parameter.

Klien membuat soketnya dengan memanggil fungsi soket atau WSASocket menggunakan tuple LocalAddr.lpSockaddr-sa_family>, iSocketType, dan iProtocol sebagai parameter. Klien menggunakan kombinasi RemoteAddr.lpSockaddr dan RemoteAddr.lpSockaddrLength sebagai parameter saat membuat koneksi jarak jauh menggunakan fungsi connect, ConnectEx, atau WSAConnect .

Struktur Data Kelas Layanan

Ketika kelas layanan baru diinstal, struktur WSASERVICECLASSINFO harus disiapkan dan disediakan. Struktur ini juga terdiri dari substruktur yang berisi serangkaian anggota yang berlaku untuk namespace tertentu. Struktur data info kelas adalah sebagai berikut:

arsitektur struktur data kelas layanan

Untuk setiap kelas layanan, ada satu struktur WSASERVICECLASSINFO . Dalam struktur WSASERVICECLASSINFO , pengidentifikasi unik kelas layanan terkandung dalam anggota lpServiceClassId , dan string tampilan terkait direferensikan oleh anggota lpServiceClassName . Ini adalah string yang dikembalikan oleh fungsi WSAGetServiceClassNameByClassId .

Anggota lpClassInfos dalam struktur WSASERVICECLASSINFO mereferensikan array struktur WSANSCLASSINFO , yang masing-masing memasok anggota bernama dan diketik yang berlaku untuk namespace tertentu. Contoh nilai untuk anggota lpszName meliputi: "SapId", "TcpPort", "UdpPort", dll. String ini umumnya khusus untuk namespace yang diidentifikasi di anggota dwNameSpace . Nilai umum untuk anggota dwValueType mungkin REG_DWORD, REG_SZ, dll. Anggota dwValueSize menunjukkan panjang item data yang ditunjukkan oleh lpValue.

Seluruh kumpulan data yang diwakili dalam struktur WSASERVICECLASSINFO disediakan untuk setiap penyedia namespace ketika fungsi WSAInstallServiceClass dipanggil. Setiap penyedia namespace layanan individu kemudian menyaring daftar struktur WSANSCLASSINFO dan mempertahankan informasi yang berlaku untuk itu.

AFPROTOCOLS

CSADDR_INFO

Model Resolusi Nama

Resolusi Nama Independen Protokol

Pendaftaran dan Resolusi Nama

SOCKET_ADDRESS

Ringkasan Fungsi Resolusi Nama

WSAECOMPARATOR

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSAQUERYSET

WSASERVICECLASSINFO