Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1429
  • Last Modified:

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

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
uuderzo
Asked:
uuderzo
  • 3
  • 3
1 Solution
 
jkrCommented:
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
 
uuderzoAuthor Commented:
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
 
uuderzoAuthor Commented:
I'd never tought to this approach. Nice one, even if I still wonder why the compiler gives me that error.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
jkrCommented:
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
 
jkrCommented:
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
 
uuderzoAuthor Commented:
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

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now