⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wscontrol.html

📁 SDK FAQ集
💻 HTML
📖 第 1 页 / 共 5 页
字号:
                    LPDWORD pcbRequestInfoLen,                    LPVOID pResponseInfo,                    LPDWORD pcbResponseInfoLen                );</pre><h5>Return Value</h5><p><code>WsControl()</code> returns 0 on success. Otherwise a non-zerovalue is returned. It might return <code>STATUS_BUFFER_TOO_SMALL</code>if the output buffer length (<code>*pcbResponseInfoLen</code>) istoo small. It doesn't seem to generate errors that can be retrievedby <code>WSAGetLastError()</code>.</p><h5>Paramters</h5><p><code>pTcpRequestInfo</code> is of type<code>PTCP_REQUEST_QUERY_INFORMATION_EX</code>, or of type<code>PTCP_REQUEST_SET_INFORMATION_EX</code>. For the calls I tracedin winipcfg.exe, the inputs common to all query calls were:</p><pre>                protocol = IPPROTO_TCP;                action = WSCTL_TCP_QUERY_INFORMATION;</pre><p>Not all output structures could be found for the queries made inwinipcfg.exe. As a result, I had to make some up. The made up ones aredefined in the sample code below. Note: you may be able to deduce more ofthe parameter definitions by looking at the SNMP, <code>WSAIoctl()</code>,or IP Helper data structures in the current Platform SDK.</p><p>Again, many thanks are due to<a href="mailto:tdivine@pcausa.com"> Thomas Divine</a> for pointing out theupdated wshsmple in the NT4 DDK. The headers in that sample allowedthe input parameters to finally be discovered.</p><h4>Sample Code</h4><p>The sample code below works on both Windows 95 and Windows 98. Thesample emulates all the queries done by winipcfg.exe as it starts up.</p><hr noshade size=1 color=#404040><h4 class=lmargin><a href="../articles/src/wsctl.cpp">wsctl.cpp</a></h4><pre><font color="#444444">// wsctl.cpp</font><font color="#444444">// Demonstrates possible calling params for the undocumented wsock32.dll</font><font color="#444444">// api &quot;WsControl&quot;, which is used by winipcfg.exe on win95/98.  wsock32.dll</font><font color="#444444">// is the 32-bit thunk to old winsock implementations (I think).</font><font color="#444444">// Gets ip info for the current interface list.</font><font color="#444444">// Tom Sanfilippo</font><font color="#444444">// tsanfilippo@earthlink.net</font><font color="#444444">// December 12, 1999</font><font color="#444444">// Thanks are due to Thomas F. Divine &lt;tdivine@pcausa.com&gt;</font><font color="#444444">// for pointing out the updated wshsmple in the NT4DDK.</font><font color="#444444">// The headers in that sample allowed the input parameters</font><font color="#444444">// to finally be discovered.</font><font color="0000ff"><strong>#include <font color="#008000">&lt;windows.h&gt;</font></strong></font><font color="0000ff"><strong>#include <font color="#008000">&lt;stdio.h&gt;</font></strong></font><font color="0000ff"><strong>#include <font color="#008000">&lt;winsock.h&gt;</font></strong></font><font color="0000ff"><strong>#include <font color="#008000">&lt;crtdbg.h&gt;</font></strong></font><font color="0000ff"><strong>#include <font color="#008000">&quot;tdiinfo.h&quot;</font>    <font color="#444444">// from recent NT4DDK &quot;\ddk\src\network\inc\tdiinfo.h&quot;</font></strong></font><font color="0000ff"><strong>#include <font color="#008000">&quot;smpletcp.h&quot;</font>   <font color="#444444">// from recent NT4DDK &quot;\ddk\src\network\wshsmple\smpletcp.h&quot;</font></strong></font><strong>typedef</strong> <strong>int</strong> <font color="4444FF">(</font><font color="#2040a0">__stdcall</font> <font color="4444FF">*</font> <font color="#2040a0">WsControlProc</font><font color="4444FF">)</font> <font color="4444FF">(</font><font color="#2040a0">DWORD</font>, <font color="#2040a0">DWORD</font>, <font color="#2040a0">LPVOID</font>, <font color="#2040a0">LPDWORD</font>,                                         <font color="#2040a0">LPVOID</font>, <font color="#2040a0">LPDWORD</font><font color="4444FF">)</font><font color="4444FF">;</font><strong>typedef</strong> <strong>int</strong> <font color="4444FF">(</font><font color="#2040a0">__stdcall</font> <font color="4444FF">*</font> <font color="#2040a0">WSAGetLastErrorProc</font><font color="4444FF">)</font> <font color="4444FF">(</font><strong>void</strong><font color="4444FF">)</font><font color="4444FF">;</font><strong>typedef</strong> <strong>int</strong> <font color="4444FF">(</font><font color="#2040a0">__stdcall</font> <font color="4444FF">*</font> <font color="#2040a0">WSAStartupProc</font><font color="4444FF">)</font> <font color="4444FF">(</font><font color="#2040a0">WORD</font> <font color="#2040a0">wVersionRequested</font>,                                          <font color="#2040a0">LPWSADATA</font> <font color="#2040a0">lpWSAData</font><font color="4444FF">)</font><font color="4444FF">;</font><strong>typedef</strong> <strong>int</strong> <font color="4444FF">(</font><font color="#2040a0">__stdcall</font> <font color="4444FF">*</font> <font color="#2040a0">WSACleanupProc</font><font color="4444FF">)</font> <font color="4444FF">(</font><strong>void</strong><font color="4444FF">)</font><font color="4444FF">;</font><font color="#2040a0">WsControlProc</font> <font color="#2040a0">WsControl</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font><font color="#2040a0">WSAGetLastErrorProc</font> <font color="#2040a0">WSAGetLastError1</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font><font color="#2040a0">WSAStartupProc</font> <font color="#2040a0">WSAStartup1</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font><font color="#2040a0">WSACleanupProc</font> <font color="#2040a0">WSACleanup1</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font><font color="0000ff"><strong>#define WSCTL_TCP_QUERY_INFORMATION 0</strong></font><font color="0000ff"><strong>#define WSCTL_TCP_SET_INFORMATION   1   <font color="#444444">//??</font></strong></font><font color="0000ff"><strong>#define IP_MIB_ROUTETABLE_ENTRY_ID              0x101</strong></font><font color="0000ff"><strong>#pragma pack(push,1)</strong></font><strong>typedef</strong> <strong>struct</strong> <font color="#2040a0">IPRouteEntry</font> <font color="4444FF"><strong>{</strong></font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_addr</font><font color="4444FF">;</font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_index</font><font color="4444FF">;</font>            <font color="#444444">//matches if_index in IFEntry and iae_index in IPAddrEntry</font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_metric</font><font color="4444FF">;</font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_unk1</font><font color="4444FF">;</font>             <font color="#444444">//??</font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_unk2</font><font color="4444FF">;</font>             <font color="#444444">//??</font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_unk3</font><font color="4444FF">;</font>             <font color="#444444">//??</font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_gw</font><font color="4444FF">;</font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_unk4</font><font color="4444FF">;</font>             <font color="#444444">//??</font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_unk5</font><font color="4444FF">;</font>             <font color="#444444">//??</font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_unk6</font><font color="4444FF">;</font>             <font color="#444444">//??</font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_mask</font><font color="4444FF">;</font>    <font color="#2040a0">ulong</font> <font color="#2040a0">ire_unk7</font><font color="4444FF">;</font>             <font color="#444444">//??</font><font color="4444FF"><strong>}</strong></font> <font color="#2040a0">IPRouteEntry</font><font color="4444FF">;</font><font color="0000ff"><strong>#pragma pack(pop)</strong></font><strong>int</strong> <font color="#2040a0">main</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">argc</font>, <strong>char</strong> <font color="4444FF">*</font><font color="4444FF">*</font><font color="#2040a0">argv</font><font color="4444FF">)</font><font color="4444FF"><strong>{</strong></font>    <strong>int</strong> <font color="#2040a0">result</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font>    <font color="#2040a0">HMODULE</font> <font color="#2040a0">hModule</font><font color="4444FF">;</font>    <font color="#2040a0">WSADATA</font> <font color="#2040a0">WSAData</font><font color="4444FF">;</font>    <font color="#2040a0">hModule</font> <font color="4444FF">=</font> <font color="#2040a0">LoadLibrary</font><font color="4444FF">(</font><font color="#008000">&quot;wsock32.dll&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>    <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">!</font><font color="#2040a0">hModule</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font>        <font color="#2040a0">fprintf</font><font color="4444FF">(</font><font color="#2040a0">stderr</font>, <font color="#008000">&quot;LoadLibrary failed for wsock32.dll (%ld)<font color="#77dd77">\n</font>&quot;</font>,                <font color="#2040a0">GetLastError</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>        <strong>return</strong> <font color="#2040a0">EXIT_FAILURE</font><font color="4444FF">;</font>    <font color="4444FF"><strong>}</strong></font>    <font color="#2040a0">WsControl</font> <font color="4444FF">=</font> <font color="4444FF">(</font><font color="#2040a0">WsControlProc</font><font color="4444FF">)</font> <font color="#2040a0">GetProcAddress</font><font color="4444FF">(</font><font color="#2040a0">hModule</font>, <font color="#008000">&quot;WsControl&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -