<?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[Bei Hook öfters mal Programmabsturz]]></title><description><![CDATA[<p>Hi ho,</p>
<p>also ich habe einen thread spezifischen Hook in ein MSOffice Produkt,<br />
es funktioniert alles soweit schön, ich kann die Messages der Childs abfangen,<br />
und per Memory Mapping in mein verarbeitendes Programm schicken.</p>
<p>Das problem ist das denn öfters mal die gehookte Applikation ein Error<br />
0xc0000005 meldet (im Problembericht).</p>
<p>Ich habe keine Ahnung was das für ein code ist, geschweige denn wie ich das<br />
beheben kann.</p>
<p>Meine erste vermutung ist gewesen, oder ist immer noch,<br />
dass der durch den hook erzeugten Timeout der Fehler erzeugt wird,<br />
dabei habe ich schon alles mögliche getan um es zu Beschleunigen.</p>
<p>Eine andere Idee wäre, innerhalb des Hooks Childwindow spezifische sublassing's<br />
zu betreiben, dann den hook zu entfernen, soo0 das letzte was mir einfiele.</p>
<p>Seid gegrüßt und danke für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241202/bei-hook-öfters-mal-programmabsturz</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 16:07:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241202.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 May 2009 15:09:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Sun, 17 May 2009 15:09:06 GMT]]></title><description><![CDATA[<p>Hi ho,</p>
<p>also ich habe einen thread spezifischen Hook in ein MSOffice Produkt,<br />
es funktioniert alles soweit schön, ich kann die Messages der Childs abfangen,<br />
und per Memory Mapping in mein verarbeitendes Programm schicken.</p>
<p>Das problem ist das denn öfters mal die gehookte Applikation ein Error<br />
0xc0000005 meldet (im Problembericht).</p>
<p>Ich habe keine Ahnung was das für ein code ist, geschweige denn wie ich das<br />
beheben kann.</p>
<p>Meine erste vermutung ist gewesen, oder ist immer noch,<br />
dass der durch den hook erzeugten Timeout der Fehler erzeugt wird,<br />
dabei habe ich schon alles mögliche getan um es zu Beschleunigen.</p>
<p>Eine andere Idee wäre, innerhalb des Hooks Childwindow spezifische sublassing's<br />
zu betreiben, dann den hook zu entfernen, soo0 das letzte was mir einfiele.</p>
<p>Seid gegrüßt und danke für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711814</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Sun, 17 May 2009 15:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Sun, 17 May 2009 16:47:01 GMT]]></title><description><![CDATA[<p>Ganz einfach:<br />
Dein Code ist buggy und crashed die andere Applikation weil es vermutlich Speicher überschreibt, den es nicht überschrieben dürfte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711860</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 17 May 2009 16:47:01 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Thu, 21 May 2009 17:32:35 GMT]]></title><description><![CDATA[<p>Jo Martin,</p>
<p>ja scheint so, ich übermittle per FileMapping daten von der Hook.dll zu meinem Main prog.</p>
<p>Anscheinend wird an einer stelle gleichzeitig geschrieben und gelesen, z.b. Dll schreibt wärend main app ließt.</p>
<p>Wir kann ich das umgehen, bzw. welche fkt. kann ich nutzen um festzustellen ob das &quot;filehandle&quot; gerade busy ist???</p>
<p>Ich danke Dir schonmal <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/1713840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713840</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Thu, 21 May 2009 17:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Thu, 21 May 2009 17:48:37 GMT]]></title><description><![CDATA[<p>quatsch wenn dein hook schreibt und dein programm liest kriegt dein programm schlimmstenfalls murks zu lesen aber ein absturz is das nicht. dein hook.dll wird auf irgendwelchen readonly speicher schreiben bzw auf ungemappte seite zugreifen. dein hook is buggy wie marti sagte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713847</guid><dc:creator><![CDATA[Bombe0]]></dc:creator><pubDate>Thu, 21 May 2009 17:48:37 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Thu, 21 May 2009 18:09:15 GMT]]></title><description><![CDATA[<p>Danke für deine schnelle Antwort.</p>
<p>Die dll hat zugriff auf drei bereiche:</p>
<p>als shared definierte variable<br />
die in der dll als global definierte Variablen<br />
und einmal das File Mapping object.</p>
<p>Wenn Martin und Du das Mapping ausschließen kann es ja nur an dem Heap liegen(?).</p>
<p>Ich kann getroßt lokale vars ausschließen, bei array's werden die allozierten speicherbereiche nicht überschritten und am ende wieder freigegeben.</p>
<p>Falls ich in einer Stunde das nicht gelösst bekomme poste ich mal den Code.</p>
<p>Danke <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/1713851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713851</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Thu, 21 May 2009 18:09:15 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Thu, 21 May 2009 18:11:01 GMT]]></title><description><![CDATA[<p>Ja, Code wäre angebracht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713853</guid><dc:creator><![CDATA[Schwerstkodierer]]></dc:creator><pubDate>Thu, 21 May 2009 18:11:01 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Thu, 21 May 2009 18:27:40 GMT]]></title><description><![CDATA[<p>zeusosc schrieb:</p>
<blockquote>
<p>Meine erste vermutung ist gewesen, oder ist immer noch, dass der durch den hook erzeugten Timeout der Fehler erzeugt wird, (...)</p>
</blockquote>
<p>So ist es auch. Vermutlich ist der Hook nicht für Multi-Thread-Anwendungen konzipiert worden. Logge mal die jeweiligen Thread-IDs mit und achte darauf, wann die Exception immer auftritt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713865</guid><dc:creator><![CDATA[problemkenner]]></dc:creator><pubDate>Thu, 21 May 2009 18:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Thu, 21 May 2009 22:17:12 GMT]]></title><description><![CDATA[<p>soo erstmal der kot:</p>
<pre><code class="language-cpp">// dllmain.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung.
#include &quot;stdafx.h&quot;

#ifdef UNICODE
typedef std::wstring String;
#else
typedef std::string String;
#endif
using namespace std;

#pragma data_seg (&quot;Shared&quot;)
 HWND hWindow=NULL  ;

#pragma data_seg ()
#pragma comment (linker, &quot;/section:Shared,RWS&quot;)

HINSTANCE hDllInstance=NULL ;
HHOOK htesthook=NULL;
LPCTSTR pBuf;
HANDLE hMapFile;

String int_to_str(int i)
{
#ifdef UNICODE
wostringstream ret;
#else
ostringstream ret;
#endif
ret &lt;&lt; i;
return ret.str();   
}

LRESULT CALLBACK MsgProc(int,WPARAM,LPARAM);
LRESULT SendMsg(String);
void OpenFio(void);
void CloseFio(void);
void stdInitINFO(void);
BOOL cpyBufIO(void);

struct{
RECT wndRect;
double zoom;
SCROLLINFO vScroll;
SCROLLINFO hScroll;
int x_pos;
int y_pos;
DWORD dwError;
BOOL bKeyState;
} INFO;

#define BUF_SIZE 4096
TCHAR szName[]=TEXT(&quot;Global\\WordCapture&quot;);
TCHAR szMsg[]=TEXT(&quot;Message from first process.&quot;);
int *clrBuf;

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{

	//MessageBox(HWND_DESKTOP, (LPCWSTR)L&quot;huhu&quot;,(LPCTSTR)L&quot;lala&quot;,IDOK);
	switch (ul_reason_for_call)
	{

	case DLL_PROCESS_ATTACH:
		{//MessageBox(HWND_DESKTOP, (LPCWSTR)L&quot;DLL_PROCESS_ATTACH&quot;,(LPCTSTR)L&quot;lala&quot;,IDOK);
	hDllInstance=(HINSTANCE) hModule ;
		OpenFio();
		stdInitINFO();

		break;}
	case DLL_THREAD_ATTACH:
		{//MessageBox(HWND_DESKTOP, (LPCWSTR)L&quot;DLL_THREAD_ATTACH&quot;,(LPCTSTR)L&quot;lala&quot;,IDOK);
		hDllInstance=(HINSTANCE) hModule ;
		OpenFio();
		stdInitINFO();

		break;}
	case DLL_THREAD_DETACH:
		{//MessageBox(HWND_DESKTOP, (LPCWSTR)L&quot;DLL_THREAD_DETACH&quot;,(LPCTSTR)L&quot;lala&quot;,IDOK);
		CloseFio();
		break;}
	case DLL_PROCESS_DETACH:
		{//MessageBox(HWND_DESKTOP, (LPCWSTR)L&quot;DLL_PROCESS_DETACH&quot;,(LPCTSTR)L&quot;lala&quot;,IDOK);
		CloseFio();
		break;}
	default:	
		break;
	}
	return TRUE;
}
EXPORT BOOL SetupHook (HWND hParent, DWORD dwThreadId){
    hWindow = hParent ;

 HHOOK hTempHook=SetWindowsHookEx (WH_CALLWNDPROC, MsgProc,hDllInstance,dwThreadId) ;  

    if (hTempHook==NULL)//hTempHook == NULL)
{String temp=(LPWSTR)L&quot;Got an Error:&quot;; 
	temp+=int_to_str(GetLastError());
	MessageBox(HWND_DESKTOP,(LPCWSTR)L&quot;error&quot;,(LPCWSTR)L&quot;&quot;,IDOK);
return 1;};
htesthook=hTempHook;

String temp=(LPCWSTR)L&quot;Hook installed \r\n&quot;;
SendMsg(temp);

	return TRUE ;
}

LRESULT CALLBACK MsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{

	if(nCode!=HC_ACTION)
	{
		return CallNextHookEx (htesthook,nCode,wParam,lParam);
	}

CWPSTRUCT* cp=(CWPSTRUCT*)lParam;
TCHAR *buffer;
buffer=new TCHAR[300];
GetClassName((cp-&gt;hwnd),(LPWSTR)buffer,(DWORD)299);
INFO.bKeyState=FALSE;
try{
	if((LPCWSTR)(LONG_PTR)buffer==(String)(LPCWSTR)L&quot;ScrollBar&quot;)
	{
		SCROLLINFO sbi;
		sbi.cbSize=sizeof(SCROLLINFO);
		sbi.fMask=SIF_ALL;
		GetScrollInfo((cp-&gt;hwnd),SB_CTL,&amp;sbi);
		RECT rect;
		GetWindowRect((cp-&gt;hwnd),&amp;rect);
		if((rect.bottom-rect.top)&gt;(rect.right-rect.left))
		{INFO.vScroll=sbi;}
		else
		{INFO.hScroll=sbi;}
		INFO.dwError=GetLastError();

		cpyBufIO();

		delete[] buffer;
		return CallNextHookEx (htesthook,nCode,wParam,lParam);
	}
}catch(...){ MessageBox((HWND)NULL,(LPCWSTR)L&quot;Error @ Scrollbar write&quot;,(LPCWSTR)L&quot;Test.dll&quot;,IDOK); };

try{
	if((LPCWSTR)(LONG_PTR)buffer==(String)(LPCWSTR)L&quot;RichEdit20W&quot;)
	{
		TCHAR *buf1;
		TCHAR *buf2;
		buf1=new TCHAR[300];
		buf2=new TCHAR[300];
		GetClassName(GetParent((cp-&gt;hwnd)),(LPWSTR)buf1,(DWORD)299); 
		if((LPCWSTR)(LONG_PTR)buf1==(String)(LPCWSTR)L&quot;MsoCommandBar&quot;)
		{	
			int iLength=(int)GetWindowText((cp-&gt;hwnd),(LPWSTR)buf2,(DWORD)299);
			String strWindowText=(LPCWSTR)(LONG_PTR)buf2;
			size_t stPos=strWindowText.find_first_of('%',0);
			if(stPos!=String::npos)
			{  
				if(INFO.zoom!= (double)_wtoi(strWindowText.c_str()))
				{
					INFO.zoom=(double)_wtoi(strWindowText.c_str());
					INFO.dwError=GetLastError();

					cpyBufIO();

				}

			}			
		}
		delete[] buf1;
		delete[] buf2;
		delete[] buffer;
		return CallNextHookEx (htesthook,nCode,wParam,lParam);
	}
}catch(...){ MessageBox((HWND)NULL,(LPCWSTR)L&quot;Error @ Zoom&quot;,(LPCWSTR)L&quot;Test.dll&quot;,IDOK); };

try{
	if((cp-&gt;hwnd!=(HWND)NULL)&amp;&amp;(GetAsyncKeyState(VK_LCONTROL))&amp;&amp;(cp-&gt;message==WM_NCHITTEST)&amp;&amp;((LPCWSTR)(LONG_PTR)buffer==(String)(LPCWSTR)L&quot;_WwG&quot;))
	{
		//now the mouse coordinates has to be set
		INFO.x_pos=LOWORD(cp-&gt;lParam);
		INFO.y_pos=HIWORD(cp-&gt;lParam);
		//Set Buffer copy to
		INFO.bKeyState=TRUE;
		INFO.dwError=GetLastError();

		cpyBufIO();
		delete[] buffer;
		return CallNextHookEx (htesthook,nCode,wParam,lParam);//hhkhook, nCode, wParam, lParam);
	}
}catch(...){ MessageBox((HWND)NULL,(LPCWSTR)L&quot;Error @ Mouse&quot;,(LPCWSTR)L&quot;Test.dll&quot;,IDOK); };

try{
	if((LPCWSTR)(LONG_PTR)buffer==(String)(LPCWSTR)L&quot;_WwG&quot;)
	{
		RECT rect;
		GetWindowRect((cp-&gt;hwnd),&amp;rect);
		INFO.wndRect.left=rect.left;
		INFO.wndRect.right=rect.right;
		INFO.wndRect.top=rect.top;
		INFO.wndRect.bottom=rect.bottom;
		INFO.dwError=GetLastError();

		cpyBufIO();

		delete[] buffer;
		return CallNextHookEx (htesthook,nCode,wParam,lParam);
	}
}catch(...){ MessageBox((HWND)NULL,(LPCWSTR)L&quot;Error @ _Wwg&quot;,(LPCWSTR)L&quot;Test.dll&quot;,IDOK); };
delete [] buffer;
return CallNextHookEx (htesthook,nCode,wParam,lParam);
}

EXPORT BOOL UninstallHook (DWORD dwThreadId){

	UnhookWindowsHookEx (htesthook);//hHook) ;
	String temp=(LPCWSTR)L&quot;\r\nHook Uninstalled&quot;;
SendMsg(temp);

return TRUE;

};

void OpenFio(void)
{
clrBuf=new int[BUF_SIZE];
for(int i=0;i&lt;BUF_SIZE;i++)
{clrBuf[i]=0;}

 hMapFile = OpenFileMapping(
                   FILE_MAP_ALL_ACCESS,   // read/write access
                   FALSE,                 // do not inherit the name
                   szName);               // name of mapping object 

   if (hMapFile == NULL) 
   { 
      MessageBox(NULL,(LPCWSTR)L&quot;Could not create file mapping object&quot;,(LPCWSTR)L&quot;Error&quot;,IDOK); 
             GetLastError(); 
	   CloseHandle(hMapFile);
      return ;
   }
   pBuf = (LPTSTR) MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,BUF_SIZE );           

   if (pBuf == NULL) 
   { 
      MessageBox(NULL,(LPCWSTR)L&quot;Could not map view of file&quot;,(LPCWSTR)L&quot;Error&quot;,IDOK); 
             GetLastError(); 
	   CloseHandle(hMapFile);

      return ;
   }

return;
}
void CloseFio(void)
{
 UnmapViewOfFile(pBuf);
 CloseHandle(hMapFile);
delete[] clrBuf;
return;
}
LRESULT SendMsg(String temp)
{
long length;
CopyMemory((PVOID)pBuf,(PVOID)clrBuf ,BUF_SIZE);

if(BUF_SIZE&gt;(temp.length()*sizeof(TCHAR)))
{length=(temp.length()*sizeof(TCHAR));}
else
{length=BUF_SIZE;};
CopyMemory((PVOID)pBuf,(LPWSTR)temp.c_str() ,length);
SendNotifyMessage(hWindow,(WM_USER+3),(WPARAM)NULL,(LPARAM)length);
return TRUE;
}
void stdInitINFO(void)
{
SCROLLINFO siTemp;
siTemp.cbSize=sizeof(SCROLLINFO);
siTemp.fMask=0;
siTemp.nMax=0;
siTemp.nMin=0;
siTemp.nPage=0;
siTemp.nPos=0;
siTemp.nTrackPos=0;

	INFO.wndRect.bottom=0;
	INFO.wndRect.left=0;
	INFO.wndRect.right=0;
	INFO.wndRect.top=0;
	INFO.x_pos=0;
	INFO.y_pos=0;
	INFO.zoom=100;
	INFO.hScroll=siTemp;
	INFO.vScroll=siTemp;

return;
};
BOOL cpyBufIO(void)
{
if(BUF_SIZE &gt;sizeof(INFO))
{
CopyMemory((PVOID)pBuf,(PVOID)&amp;INFO, sizeof(INFO));
//SendNotifyMessage(hWindow,(WM_USER+2),(WPARAM)NULL,(LPARAM)1);
return true;
}else{
SendMsg((LPCWSTR)L&quot;\r\ndll:Heap overflow, not Enough space to transfer data&quot;);
//MessageBox(NULL,(LPCWSTR)L&quot;&quot;,(LPCWSTR)L&quot;ERROR ind test.dll&quot;,IDOK);}
return false;
}
};
/////////////////////////////////////////////////////////////////////
</code></pre>
<p>Der hook sollte eigentlich thread spezifisch sein, denn der wird mit einer Therad ID initialisiert,...</p>
<p>Seid gegrüßt und danke für die hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713972</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Thu, 21 May 2009 22:17:12 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Fri, 22 May 2009 06:51:23 GMT]]></title><description><![CDATA[<p>Also wenn ich mir diesen Code ansehe würde ich Dir erstmal raten C++ zu lernen, bevor man irgend etwas mit Hooks macht...</p>
<p>1. Kein einziger Deiner String-Compares kann funktionieren.<br />
2. Unnötigerweise allokierst Du Speicher auf dem Heap wo es auch Speicher auf dem Stack tut.<br />
3. Deine Wahllose Casterei ist ein absoluter Horror.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714005</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 22 May 2009 06:51:23 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Fri, 22 May 2009 17:20:46 GMT]]></title><description><![CDATA[<p>Aha,</p>
<p>Punkt 1)Ok erstmal vorneweg, dass ist das erste Projekt das ich mit VC 2008 machte, und auch das erste in UNICODE, und dann noch dazu das Projekt bei welchem ich mich das erstme mal mit Hooking beschäftige.</p>
<p>Punkt 2) Die Compare'S funktionieren.<br />
Punkt 3) Das ist keine Wahllose Casterei, Der VC meckert sonst.</p>
<p>Martin ich weiß das Du etwas drauf hast, siehe mal aber bitte Punkt 1).</p>
<p>Durch den Hook bekomme ich die Informationen die ich haben möchte, aber die gehookte app schmiert durch die zugriffsverletzung ab.</p>
<p>Nenn mir doch bitte dann eine andere Möglichkeit Stringcompares für WCHAR's für den VC Compiler zu tätigen, unter Dev-cpp war ich nur char's gewöhnt.<br />
Bitte dann auch gleich cons tchar zu tchar, tchar zu wchar string etc...</p>
<p>Zu deinem Punkt 2)<br />
Für mich war die frage woher der Allokierte Speicher kam unter Winapi bisjetzt irrelevant, das kann vlt. hier das prob sein.<br />
Gib mir mal bitte ein Beispiel wo wie, etc.</p>
<p>Grüüße und danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714340</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Fri, 22 May 2009 17:20:46 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Fri, 22 May 2009 17:32:13 GMT]]></title><description><![CDATA[<p>zeusosc schrieb:</p>
<blockquote>
<p>Aha,<br />
Punkt 1)Ok erstmal vorneweg, dass ist das erste Projekt das ich mit VC 2008 machte, und auch das erste in UNICODE.</p>
</blockquote>
<p>Na und?</p>
<p>zeusosc schrieb:</p>
<blockquote>
<p>Punkt 2) Die Compare'S funktionieren.</p>
</blockquote>
<p>Bist Du sicher?<br />
Dein Compare kann nicht davon ausgehen, dass der case der Klasse korrekt ist.<br />
Klassennamen müssen caseless verglichen werden!</p>
<p>Ansonsten ist dieser Code totaler Schrott!</p>
<pre><code class="language-cpp">TCHAR *buf1;
        TCHAR *buf2;
        buf1=new TCHAR[300];
        buf2=new TCHAR[300];
        GetClassName(GetParent((cp-&gt;hwnd)),(LPWSTR)buf1,(DWORD)299); 
        if((LPCWSTR)(LONG_PTR)buf1==(String)(LPCWSTR)L&quot;MsoCommandBar&quot;)
</code></pre>
<p>zeusosc schrieb:</p>
<blockquote>
<p>Punkt 3) Das ist keine Wahllose Casterei, siehe 1).<br />
Das ist wahllose Casterei!</p>
</blockquote>
<p>Hier wäre nicht ein cast notwendig:</p>
<pre><code class="language-cpp">int iLength=(int)GetWindowText((cp-&gt;hwnd),(LPWSTR)buf2,(DWORD)299);
</code></pre>
<p>zeusosc schrieb:</p>
<blockquote>
<p>Martin ich weiß das Du etwas drauf hast, siehe mal aber bitte Punkt 1).</p>
</blockquote>
<p>Und! UNICODE heißt nicht, dass man alles catsne muss. Man muss nur die richtigen Typen eben verwenden.</p>
<p>zeusosc schrieb:</p>
<blockquote>
<p>Durch den Hook bekomme ich die Informationen die ich haben möchte, aber die gehookte app schmiert durch die zugriffsverletzung ab.</p>
</blockquote>
<p>Eben! Dein Code ist so was von unübersichtlich und falsch, dass mich ein Absturz in keiner Weise wundert.</p>
<p>zeusosc schrieb:</p>
<blockquote>
<p>Nenn mir doch bitte dann eine andere Möglichkeit Stringcompares für WCHAR's für den VC Compiler zu tätigen, unter Dev-cpp war ich nur char's gewöhnt.<br />
Bitte dann auch gleich cons tchar zu tchar, tchar zu wchar string etc...</p>
</blockquote>
<p>Na dann schau mal in die MSDN nach stricmp?<br />
Du finset auch dir wchar_t Variante auf dergleichen Seite erklärt inclusive TCHAR Notation.<br />
<a href="http://msdn.microsoft.com/en-us/library/k59z8dwe(VS.80).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/k59z8dwe(VS.80).aspx</a></p>
<p>zeusosc schrieb:</p>
<blockquote>
<p>Zu deinem Punkt 2)<br />
Für mich war die frage woher der Allokierte Speicher kam unter Winapi bisjetzt irrelevant, das kann vlt. hier das prob sein.<br />
Gib mir mal bitte ein Beispiel wo wie, etc.<br />
Grüüße und danke</p>
</blockquote>
<p>Warum sollte ich das tun? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Ungeprüfter Code in TCHAR Notation:</p>
<pre><code class="language-cpp">TCHAR buf1[300];
   GetClassName(GetParent((cp-&gt;hwnd)),buf1,_countof(buf1)); 
   if(_tcsicmp(buf1,_T(&quot;MsoCommandBar&quot;))==0)
   {
       TCHAR buf2[300];
       int iLength = GetWindowText((cp-&gt;hwnd),buf2,_countof(buf2));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1714347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714347</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 22 May 2009 17:32:13 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Fri, 22 May 2009 18:04:31 GMT]]></title><description><![CDATA[<p>debuggen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714359</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Fri, 22 May 2009 18:04:31 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Fri, 22 May 2009 18:55:08 GMT]]></title><description><![CDATA[<p>olor olor!</p>
<p>Bitte mache ein neues Projekt auf, schreibe dein Programm komplett neu, überlege genau was du tust, mit jedem Buchstaben den du tippst. Schreibe sauberen Code! Soweit es nur geht! Dann überlege nochmal, und nochmal. Dann googlest du. Dann noch mehr, und noch mehr. Dann überlege wieder, noch mehr, schreibe, überlege, google, überlege, überlege, schreibe, überlege, überlege, schreibe, überlege, google, überlege, überlege.</p>
<p>Wird schon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714378</guid><dc:creator><![CDATA[olor]]></dc:creator><pubDate>Fri, 22 May 2009 18:55:08 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Fri, 22 May 2009 20:48:33 GMT]]></title><description><![CDATA[<p>Hoi,</p>
<p>Marting danke.<br />
Ich kannte die Header file TCHAR.h noch nicht.<br />
Zu der Speicherzuteilung, ich war geöhnt bei µC's mir den Stack zu nehmen den ich brauche, sowie in der alten DOS (Win97) Zeit habe ich mir halt immer den benötigten Speicher per asm direkt vom RAM genommen. Deswegen stellte sich mir die frage des Heap's und Stacks nie.<br />
Hast Du vielleicht n Link darüber, bzw. worauf ich, insbesondere bei Dll's , achten muss??? (büdde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> )</p>
<p>Noch ne Frage (erstmal):<br />
Wo ist hier der Vorteil anstatt</p>
<pre><code class="language-cpp">TCHAR *buffer; buffer=new TCHAR[300]; ...... delete[] buffer;
</code></pre>
<p>lieber:</p>
<pre><code class="language-cpp">TCHAR buffer[300]
</code></pre>
<p>zu verwenden?<br />
Der Pointer referiert doch auf den Verfügbaren Stack,..,.. !?</p>
<p>Schön das olor der Meinung ist das alles neu geschrieben werden muss,<br />
wo liegt denn deiner Meinung nach exakt das problem,<br />
bis auf die typenkonvertierung ???<br />
(und wehe du kommst jetzt mit ner simplen &quot;nimm nen switch statt die 4 mal if&quot;)</p>
<p>Seid gegrüßt und danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714423</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Fri, 22 May 2009 20:48:33 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Sat, 23 May 2009 11:54:40 GMT]]></title><description><![CDATA[<p>zeusosc schrieb:</p>
<blockquote>
<p>Hast Du vielleicht n Link darüber, bzw. worauf ich, insbesondere bei Dll's , achten muss??? (büdde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> )</p>
</blockquote>
<p>Aus dem Alter mit Tutorials bin ich raus.<br />
Insofern habe ich da wirlich keine Ahnung. Meine &quot;Bibeln&quot; waren Jeffrey Richters Programming Windows und der Petzold!</p>
<p>Man muss ansonsten gar nichts bei DLLs beachten. Man sollte eben nur keinen Programmfehler einbauen, aber das ist bei DLL und EXE IMHO gleich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>zeusosc schrieb:</p>
<blockquote>
<p>Noch ne Frage (erstmal):<br />
Wo ist hier der Vorteil anstatt</p>
<pre><code class="language-cpp">TCHAR *buffer; buffer=new TCHAR[300]; ...... delete[] buffer;
</code></pre>
<p>lieber:</p>
<pre><code class="language-cpp">TCHAR buffer[300]
</code></pre>
<p>zu verwenden?<br />
Der Pointer referiert doch auf den Verfügbaren Stack,..,.. !?</p>
</blockquote>
<p>new allokiert auf dem Heap und nicht auf dem Stack.</p>
<p>Auf dem Stack kostet es weder Zeit noch sonst was, und ist Exception sicher. Auf dem Heap musst Du selber für das freigeben sorgen. Argumente auf dem Stack räumen sich selber ab.</p>
<p>Wenn schon new dann nur mit Smartzeigern</p>
<p>zeusosc schrieb:</p>
<blockquote>
<p>Schön das olor der Meinung ist das alles neu geschrieben werden muss,<br />
wo liegt denn deiner Meinung nach exakt das problem,<br />
bis auf die typenkonvertierung ???<br />
(und wehe du kommst jetzt mit ner simplen &quot;nimm nen switch statt die 4 mal if&quot;)</p>
</blockquote>
<p>Ich würde auch sagen, schreib es neu.<br />
Und wenn Du es wirklich ernst meinst, mach genau dass, was schon gesagt wurde. Schalte Dein Hirn mal bei jederr Zeile an... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714555</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 23 May 2009 11:54:40 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Fri, 05 Jun 2009 13:11:06 GMT]]></title><description><![CDATA[<p>Hoi leutz,</p>
<p>also durch debugging hatte ich herausgefunden das die fkt.:</p>
<pre><code class="language-cpp">CopyMemory(pBuf,&amp;INFO,sizeof(INFO));
</code></pre>
<p>die Zugriffsverletzung verursacht/e.</p>
<p>Mit SecureZeroMemory ergibt sich das gleiche Bild, um genau zu sein bei</p>
<pre><code class="language-cpp">FORCEINLINE
PVOID
RtlSecureZeroMemory(
    __in_bcount(cnt) PVOID ptr,
    __in SIZE_T cnt
    )
{
    volatile char *vptr = (volatile char *)ptr;

#if defined(_M_AMD64)

        __stosb((PBYTE )((DWORD64)vptr), 0, cnt);

#else

    while (cnt) {
        *vptr = 0; //&lt;- hier
        vptr++;
        cnt--;
    }

#endif

    return ptr;
}
</code></pre>
<p>Ansich das gleiche Problem.</p>
<p>Ich habe den ptr wärend der Laufzeit geprüft, die Addresse ändert sich nicht.<br />
Weiter habe ich dafür gesorgt das zwei zugriffe zur gleichen Zeit vermieden werden.</p>
<p>Die cnt Variable hat zum auftreten des Fehlers den 4095, also zeigt vptr in diesem fall auf die gleiche addresse wie pBuf.</p>
<p>Ich habe leider keine Ahnung woran das nun liegen könnte,<br />
vielleicht könnt ihr mir ja weiterhelfen.</p>
<p>Seid gegrüßt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721760</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Fri, 05 Jun 2009 13:11:06 GMT</pubDate></item><item><title><![CDATA[Reply to Bei Hook öfters mal Programmabsturz on Fri, 05 Jun 2009 15:35:55 GMT]]></title><description><![CDATA[<p>schreib alles neu. bei hooks muss man sein hirn einschalten sonst wird das nix. solche rumfrickelei wird dich ned weit bringen, siehste ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721857</guid><dc:creator><![CDATA[hack0r]]></dc:creator><pubDate>Fri, 05 Jun 2009 15:35:55 GMT</pubDate></item></channel></rss>