Solved

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

Posted on 2009-05-19
8
1,383 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
Comment Utility
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
Comment Utility
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
Comment Utility
I'd never tought to this approach. Nice one, even if I still wonder why the compiler gives me that error.
0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 86

Expert Comment

by:jkr
Comment Utility
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
Comment Utility
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
Comment Utility
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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Here is a helpful source code for C++ Builder programmers that allows you to manage and manipulate HTML content from C++ code, while also handling HTML events like onclick, onmouseover, ... Some objects defined and used in this source include: …
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

763 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

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now