How can I trap an API call by windows

L

lallous

Ali Akbar said:
Hi everyone,
I just wanted to know how my program can trap a particular API
call by windows. (The idea is that I want to hook all the open text
boxes and keep hooking new ones as and when they are created).

So for this i want to trap the CreateWindow or CreateWindowEx API
as that I can keep track of the handles etc. I have an idea that
this can be done by mapping the entry points of kernel32.dll,
gdi32.dll etc, just like how SoftIce does, but Im not very sure about
this.

Any suggestions or help would be greatly appreciated.

Thanks in advance,
Ali.

Hello,

Although this is not a "C" question, you can still search for "Detours" by
Microsoft or "API Hooking" on google.
 
A

Ali Akbar

Hi everyone,
I just wanted to know how my program can trap a particular API
call by windows. (The idea is that I want to hook all the open text
boxes and keep hooking new ones as and when they are created).

So for this i want to trap the CreateWindow or CreateWindowEx API
as that I can keep track of the handles etc. I have an idea that
this can be done by mapping the entry points of kernel32.dll,
gdi32.dll etc, just like how SoftIce does, but Im not very sure about
this.

Any suggestions or help would be greatly appreciated.

Thanks in advance,
Ali.
 
K

Kevin Goodsell

Ali said:
Hi everyone,
I just wanted to know how my program can trap a particular API
call by windows.

Then you probably wanted a Windows programming group. This group is for
discussion of the C language as defined by the international C standard,
which has nothing to say about Windows or trapping APIs (whatever that
means).

-Kevin
 
G

glen herrmannsfeldt

Ali said:
Hi everyone,
I just wanted to know how my program can trap a particular API
call by windows. (The idea is that I want to hook all the open text
boxes and keep hooking new ones as and when they are created).
So for this i want to trap the CreateWindow or CreateWindowEx API
as that I can keep track of the handles etc. I have an idea that
this can be done by mapping the entry points of kernel32.dll,
gdi32.dll etc, just like how SoftIce does, but Im not very sure about
this.

The only way that I can think of that is on topic here is to do
something like:

#define CreateWindow myCreateWindow

in the program you want to trap, and then separately write a
myCreateWindow function that does whatever you want to do
before or after calling the real CreateWindow function.

That may or may not satisfy your question.

Another way, though getting off of standard C, is to go through
the system library with a binary editor and change all
strings that say CreateWindow into something like XCreatWindow
(It must be the same length to edit in the compiled form.)

Then you can write a function called CreateWindow that will
then call XCreatWindow.

hope this helps,

-- glen
 
K

Keith Thompson

glen herrmannsfeldt said:
Another way, though getting off of standard C, is to go through
the system library with a binary editor and change all
strings that say CreateWindow into something like XCreatWindow
(It must be the same length to edit in the compiled form.)

Then you can write a function called CreateWindow that will
then call XCreatWindow.

Of course, this may not work if the system library format includes
some kind of index or hash table.
 
A

August Derleth

on Wed 17 Dec
2003 01:00:23a:
Then you probably wanted a Windows programming group. This group is for
discussion of the C language as defined by the international C standard,
which has nothing to say about Windows or trapping APIs (whatever that
means).

-Kevin

<OT>
From what I understand, it means catching a call to an API (the hooks an
OS provides to application programs) so you can execute your code in
response to that call before the OS has a chance to do anything.

It is, of course, offtopic here.
</OT>
 
B

Ben Pfaff

I just wanted to know how my program can trap a particular API
call by windows. (The idea is that I want to hook all the open text
boxes and keep hooking new ones as and when they are created).

Your question is outside the domain of comp.lang.c, which discusses
only the standard C programming language, including the standard C
library. This is a remarkably narrow topic compared to what many
people expect.

For your convenience, the list below contains topics that are not
on-topic for comp.lang.c, and suggests newsgroups for you to
explore if you have questions about these topics. Please do
observe proper netiquette before posting to any of these
newsgroups. In particular, you should read the group's charter
and FAQ, if any. If those fail to answer your question then you
should browse through at least two weeks of recent articles to
make sure that your question has not already been answered.

* OS-specific questions, such as how to clear the screen,
access the network, list the files in a directory, or read
"piped" output from a subprocess. These questions should be
directed to OS-specific newsgroups, such as
comp.os.ms-windows.programmer.misc, comp.unix.programmer, or
comp.os.linux.development.apps.

* Compiler-specific questions. Ask about these in
compiler-specific newsgroups, such as gnu.gcc.help or
comp.os.ms-windows.programmer.misc.

* Processor-specific questions, such as questions about
assembly and machine code. x86 questions are appropriate in
comp.lang.asm.x86, embedded system processor questions may
be appropriate in comp.arch.embedded.

* ABI-specific questions, such as how to interface assembly
code to C. These questions are both processor- and
OS-specific and should typically be asked in OS-specific
newsgroups.

* Algorithms, except questions about C implementations of
algorithms. "How do I implement algorithm X in C?" is not a
question about a C implementation of an algorithm, it is a
request for source code. Newsgroups comp.programming and
comp.theory may be appropriate.

* Making C interoperate with other languages. C has no
facilities for such interoperation. These questions should
be directed to system- or compiler-specific newsgroups. C++
has features for interoperating with C, so consider
comp.lang.c++ for such questions.

* The C standard, as opposed to standard C. Questions about
the C standard are best asked in comp.std.c.

* C++. Please do not post or cross-post questions about C++
to comp.lang.c. Ask C++ questions in C++ newsgroups, such
as comp.lang.c++ or comp.lang.c++.moderated.

news.groups.questions is a good place to ask about the appropriate
newsgroup for a given topic.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,764
Messages
2,569,564
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top