Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

How to compile 32 bit app that uses Wow64DisableWow64FsRedirection with BDS 2006

Posted on 2009-05-19
8
1,392 Views
Last Modified: 2013-11-17
Hello, I'm trying to compile my 32 bit application written with the C plus plus builder personality of BDS 2006.

The problem is that I need to use the API function Wow64DisableWow64FsRedirection. MSDN states that _WIN32_WINNT must be defined to 0x0501 or higher, but if I do such definition, the compiler gives me the following error:

[C++ Error] Windows.hpp(2435): E2040 Declaration terminated incorrectly

This error is related to this definition:

static const Shortint WTS_CONSOLE_CONNECT = 0x1;

Many errors like this follows the first. I cannot understand why the compiler gives me the error. If I avoid to redefine _WIN32_WINNT everything compiles except the point where I use the needed function.

Any ideas?

Thanks in advance.
0
Comment
Question by:uuderzo
  • 3
  • 3
8 Comments
 
LVL 86

Accepted Solution

by:
jkr earned 500 total points
ID: 24433795
You can circumvent that by loading 'Wow64DisableWow64FsRedirection()' dynamically from kernel32.dll, e.g.
typedef BOOL WINAPI (*FPTR_Wow64DisableWow64FsRedirection)(PVOID*);
typedef BOOL WINAPI (*FPTR_Wow64RevertWow64FsRedirection)(PVOID);
 
// ...
 
PVOID pOldValue;
 
FPTR_Wow64DisableWow64FsRedirection pWow64DisableWow64FsRedirection = GetProcAddress(GetModuleHandle(_T("kernel32.dll"),_T("Wow64DisableWow64FsRedirection"));
FPTR_Wow64RevertWow64FsRedirection pWow64RevertWow64FsRedirection = GetProcAddress(GetModuleHandle(_T("kernel32.dll"),_T("Wow64RevertWow64FsRedirection"));
 
(*pWow64DisableWow64FsRedirection)(&pOldValue);
 
// do stuff
 
(*pWow64RevertWow64FsRedirection)(pOldValue);

Open in new window

0
 

Author Comment

by:uuderzo
ID: 24435690
Wow! That works!
Thank you very much for your solution!

But... just to know... is there a reason of this malfunction? Is it the compiler or the header file?

Thanks again!
0
 

Author Closing Comment

by:uuderzo
ID: 31582955
I'd never tought to this approach. Nice one, even if I still wonder why the compiler gives me that error.
0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 86

Expert Comment

by:jkr
ID: 24435719
Not sure about Borland compilers - if you really want to find ut why that happens, have the preprocessor expand the whole header set and have a look at the lines before that specific error.
0
 
LVL 86

Expert Comment

by:jkr
ID: 24437610
Hum, as a closing word - that should be
typedef BOOL WINAPI (*FPTR_Wow64DisableWow64FsRedirection)(PVOID*);
typedef BOOL WINAPI (*FPTR_Wow64RevertWow64FsRedirection)(PVOID);
 
// ...
 
PVOID pOldValue;
 
FPTR_Wow64DisableWow64FsRedirection pWow64DisableWow64FsRedirection =
(FPTR_Wow64DisableWow64FsRedirection)GetProcAddress(GetModuleHandle(_T("kernel32.dll"),_T("Wow64DisableWow64FsRedirection"));
FPTR_Wow64RevertWow64FsRedirection pWow64RevertWow64FsRedirection = 
(FPTR_Wow64RevertWow64FsRedirection)GetProcAddress(GetModuleHandle(_T("kernel32.dll"),_T("Wow64RevertWow64FsRedirection"));
 
(*pWow64DisableWow64FsRedirection)(&pOldValue);
 
// do stuff
 
(*pWow64RevertWow64FsRedirection)(pOldValue);

Open in new window

0
 

Author Comment

by:uuderzo
ID: 24440310
You're right, the typecast was missing in your answer.
No matter, I managed to make it working.

Thank you for your correction.
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Templates For Beginners Or How To Encourage The Compiler To Work For You Introduction This tutorial is targeted at the reader who is, perhaps, familiar with the basics of C++ but would prefer a little slower introduction to the more ad…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question