<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[GetIfTable inerhaln nt service]]></title><description><![CDATA[<p>moin.<br />
hab folgendes problem, hab nen nt-service geschrieben der um gewisse zeiten per SetIfEntry internetverbindungen abschaltet (MIB_IF_ADMIN_STATUS_DOWN).<br />
das ganze arbeitet mit zeitschaltuhr.<br />
unter win2k lief es auch sauber ohne probleme.<br />
nun hab ich das ganze unter winxp getestet und da lauft das ganze einmal.<br />
danach bekomm ich von GetIfTable einen fehler mit 'die anweisung in &quot;0x0040192&quot; verweist auf speicher &quot;0x00000000&quot;. der vorgang &quot;read&quot; konnte nicht auf dem speicher durchgefuehrt werden.</p>
<pre><code>MIB_IFTABLE  *m_IfTable;
...
NetworkAdapter::NetworkAdapter()
{
	m_IfTable=NULL;
	Z_InitClass();
}

bool NetworkAdapter::Z_InitClass()
{
	DWORD size=0;
	GetIfTable(m_IfTable,&amp;size,true);
	return false;
}
</code></pre>
<p>auch nachdem ich testweise einfach mal das versucht habe :</p>
<pre><code>MIB_IFTABLE  *m_IfTable;
...
NetworkAdapter::NetworkAdapter()
{
	m_IfTable=NULL;
	Z_InitClass();
}

bool NetworkAdapter::Z_InitClass()
{
	DWORD size=0;
	MIB_IFTABLE  IfTable;
	GetIfTable(&amp;IfTable,&amp;size,true);
	return false;
}
</code></pre>
<p>gleiche fehler, auch wenn ich size=sizeof(MIB_IFTABLE) mache.<br />
aber immer nur wenn er es das zweite mal aufruft und nur unter winxp als service, als normale anwendung gehts auch ohne probs unter xp.<br />
also ich weiss net weiter, ka worans liegt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240658/getiftable-inerhaln-nt-service</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Apr 2026 08:53:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240658.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 09 May 2009 14:54:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to GetIfTable inerhaln nt service on Sat, 09 May 2009 15:13:37 GMT]]></title><description><![CDATA[<p>moin.<br />
hab folgendes problem, hab nen nt-service geschrieben der um gewisse zeiten per SetIfEntry internetverbindungen abschaltet (MIB_IF_ADMIN_STATUS_DOWN).<br />
das ganze arbeitet mit zeitschaltuhr.<br />
unter win2k lief es auch sauber ohne probleme.<br />
nun hab ich das ganze unter winxp getestet und da lauft das ganze einmal.<br />
danach bekomm ich von GetIfTable einen fehler mit 'die anweisung in &quot;0x0040192&quot; verweist auf speicher &quot;0x00000000&quot;. der vorgang &quot;read&quot; konnte nicht auf dem speicher durchgefuehrt werden.</p>
<pre><code>MIB_IFTABLE  *m_IfTable;
...
NetworkAdapter::NetworkAdapter()
{
	m_IfTable=NULL;
	Z_InitClass();
}

bool NetworkAdapter::Z_InitClass()
{
	DWORD size=0;
	GetIfTable(m_IfTable,&amp;size,true);
	return false;
}
</code></pre>
<p>auch nachdem ich testweise einfach mal das versucht habe :</p>
<pre><code>MIB_IFTABLE  *m_IfTable;
...
NetworkAdapter::NetworkAdapter()
{
	m_IfTable=NULL;
	Z_InitClass();
}

bool NetworkAdapter::Z_InitClass()
{
	DWORD size=0;
	MIB_IFTABLE  IfTable;
	GetIfTable(&amp;IfTable,&amp;size,true);
	return false;
}
</code></pre>
<p>gleiche fehler, auch wenn ich size=sizeof(MIB_IFTABLE) mache.<br />
aber immer nur wenn er es das zweite mal aufruft und nur unter winxp als service, als normale anwendung gehts auch ohne probs unter xp.<br />
also ich weiss net weiter, ka worans liegt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708206</guid><dc:creator><![CDATA[donbubu]]></dc:creator><pubDate>Sat, 09 May 2009 15:13:37 GMT</pubDate></item><item><title><![CDATA[Reply to GetIfTable inerhaln nt service on Sun, 10 May 2009 13:32:49 GMT]]></title><description><![CDATA[<p>sorry, hat sich erledigt.<br />
hatte ne extra klasse um zum inet zu verbinden und dadrinne war der fehler.<br />
ka warum win2k dat net interessiert hat und warum es bei xp erst zu meiner adapter klasse zu einem fehler kahm.<br />
was noch etwas komisch ist, das unter winxp der adapter name nicht vorhanden ist aba dat is im mom net so wichtig.</p>
<p>aba fuer alle die interesse haben ma die adapter klasse :</p>
<pre><code>#include &lt;IPHlpApi.h&gt;
#pragma comment(lib,&quot;Iphlpapi.lib&quot;)

#include &lt;mbstring.h&gt;

class NetworkAdapter{
public:
	NetworkAdapter();
	~NetworkAdapter();
	int GetAdapterCount();
	char* GetAdapterName(int index);
	char* GetAdapterDescription(int index);
	DWORD GetAdapterID(int index);
	bool EnableAdapter(int index,bool enable);
	bool EnableAdapter(char *name,bool enable);
	bool EnableAdapterID(DWORD ID,bool enable);
	bool EnableAdapterDescription(char *descr,bool enable);
	bool Z_InitClass();
private:
	#pragma pack( 1 )
	MIB_IFTABLE  *m_IfTable;
	int m_index;
	struct _adapter{
		char *name;
		char *descr;
		DWORD ID;
		MIB_IFROW *IfRow;
	};
	_adapter *m_adapter;
};

NetworkAdapter::NetworkAdapter()
{
	m_IfTable=NULL;
	m_index=0;
	m_adapter=NULL;
	if(!Z_InitClass() ) m_index=0;
}

NetworkAdapter::~NetworkAdapter()
{
	if(m_IfTable!=NULL) delete [] m_IfTable;
	if(m_adapter!=NULL)
	{
		for (int i=0;i&lt;m_index;i++)
		{
			if(m_adapter[i].name!=NULL) delete [] m_adapter[i].name;
			if(m_adapter[i].descr!=NULL) delete [] m_adapter[i].descr;
		}
		delete [] m_adapter;
	}

}
bool NetworkAdapter::Z_InitClass()
{
	DWORD size=0;
	GetIfTable(m_IfTable,&amp;size,true);

	char tmp[2];
	m_IfTable=(MIB_IFTABLE*) new BYTE [size];
	if(m_IfTable==NULL) return false;
	memset(m_IfTable,0,size);
	if (NO_ERROR!=GetIfTable(m_IfTable,&amp;size,true) ) return false;
	m_index=m_IfTable-&gt;dwNumEntries;
	if(m_index==0) return false;
	m_adapter=new _adapter [m_index];
	if(m_adapter==NULL) return false;

	for (int i=0;i&lt;m_index;i++)
	{
		m_adapter[i].name=new char [MAX_INTERFACE_NAME_LEN+1];
		if(m_adapter[i].name==NULL) return false;
		m_adapter[i].descr=new char [MAXLEN_IFDESCR+1];
		if(m_adapter[i].descr==NULL) return false;
		m_adapter[i].IfRow= &amp;m_IfTable-&gt;table[i];
		wcstombs(m_adapter[i].name,m_adapter[i].IfRow-&gt;wszName,MAX_INTERFACE_NAME_LEN);

		tmp[1]=0;
		m_adapter[i].descr[0]=0;
		for (int j = 0; j &lt; (int) m_adapter[i].IfRow-&gt;dwDescrLen; j++)
		{
			tmp[0]=_mbbtombc(m_adapter[i].IfRow-&gt;bDescr[j]);
			strcat(m_adapter[i].descr,tmp );
		}

		m_adapter[i].ID=m_adapter[i].IfRow-&gt;dwIndex;
	}
	return true;
}
/////////////////////////////////////////////////////

int NetworkAdapter::GetAdapterCount()
{
	return m_index;
}
char* NetworkAdapter::GetAdapterName(int index)
{
	if(index &gt;= m_index) return NULL;
	return m_adapter[index].name;
}
char* NetworkAdapter::GetAdapterDescription(int index)
{
	if(index &gt;= m_index) return NULL;
	return m_adapter[index].descr;
}
DWORD NetworkAdapter::GetAdapterID(int index)
{
	if(index &gt;= m_index) return NULL;
	return m_adapter[index].ID;
}
bool NetworkAdapter::EnableAdapter(int index,bool enable)
{
	bool setit=true;
	if(index &gt;= m_index) return false;
	if(enable)
	{
		if(m_adapter[index].IfRow-&gt;dwAdminStatus==MIB_IF_ADMIN_STATUS_UP) setit=false;
		m_adapter[index].IfRow-&gt;dwAdminStatus=MIB_IF_ADMIN_STATUS_UP;
	}
	else
	{
		if(m_adapter[index].IfRow-&gt;dwAdminStatus==MIB_IF_ADMIN_STATUS_DOWN) setit=false;
		m_adapter[index].IfRow-&gt;dwAdminStatus=MIB_IF_ADMIN_STATUS_DOWN;
	}
	if(setit) if(NO_ERROR!=SetIfEntry(m_adapter[index].IfRow) ) return false;
	return true;
}
bool NetworkAdapter::EnableAdapter(char *name,bool enable)
{
	for (int i=0;i&lt;m_index;i++)
	{
		if(strcmp(m_adapter[i].name,name)==0)
		{
			if(EnableAdapter(i,enable) ) return true;
		}
	}
	return false;
}
bool NetworkAdapter::EnableAdapterID(DWORD ID,bool enable)
{
	for (int i=0;i&lt;m_index;i++)
	{
		if(m_adapter[i].ID==ID)
		{
			if(EnableAdapter(i,enable) ) return true;
		}
	}
	return false;
}
bool NetworkAdapter::EnableAdapterDescription(char *descr,bool enable)
{
	for (int i=0;i&lt;m_index;i++)
	{
		if(strcmp(m_adapter[i].descr,descr)==0)
		{
			if(EnableAdapter(i,enable) ) return true;
		}
	}
	return false;
}
</code></pre>
<p>happy day <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708478</guid><dc:creator><![CDATA[donbubu]]></dc:creator><pubDate>Sun, 10 May 2009 13:32:49 GMT</pubDate></item></channel></rss>