Subsystem Switch

Environment: VC6, SP5, 95/98/NT/Win2K

This simple program changes the program's subsystem attribute.

It seems to be working, but don't trust it completely. If you want to test some files, please back them up first.

One day, for some reason I wanted to make a Win32 console program that doesn't pop up the console windows. I tried many ways and I found it! Linker options (/SUBSYSTEM:Windows /ENTRY:main) can do that, but I wanted to change the already compiled program's subsystem, so I examined the binary file and found it.

Probably, Windows (OS) checks the PE (Portable Executable) file's IMAGE_OPTIONAL_HEADER.Subsystem. There are some other values, but only we need IMAGE_SUBSYTEM_WINDOWS_GUI(2) or IMAGE_SUBSYSTEM_WINDOWS_CUI(3). If the value is ..._GUI, console windows doesn't pop up; but, if the value is ..._CUI, console windows pops up.

The following picture shows one PE file's hex dump. The subsystem's value is highlighted (3, so CUI) but doesn't have absolute offset.

Where to Use this Code

If you change console -> gui, you can get away from the console window, and all console I/O functions (ex:printf) would fail. If you change gui -> console, you can use console I/O functions for debugging. Although you may need this rarely, generally the console program's size is smaller than the GUI with its default setting.

You can find the PE specs in MSDN's Sepcifications Section. WINNT.H contains IMAGE_SUBSYSTEM_WINDOWS_GUI, IMAGE_SUBSYSTEM_WINDOWS_CUI.

Miscellany

The Linker options (/SUBSYSTEM:Windows /ENTRY:main) method may have been on codeguru already, but I didn't know. Oops! It could be a waste of labor, but it's still helpful. When I found the solution, SOMEONE said why don't you post it on codeguru. So, I looked for how to (this the first time for me) and where to post, and I found that. (Thanks to JaeJun Oh for some inspiration. And he is the SOMEONE.)

Downloads

Download demo project - 11.8 Kb
Download source - 5.32 Kb


Comments

  • Usefull demo

    Posted by Legacy on 09/10/2003 12:00am

    Originally posted by: Barbro Sagerholm

    Thanks!
    Solved my problem (I think), how to write a console
    program in VB6. I used the ReadConsole and WriteConsole functions from WinAPI "Kernel32" and then transformed the
    VB6 GUI EXE-code to a console application with your Demo!

    Reply
  • Good sample!

    Posted by Legacy on 08/05/2003 12:00am

    Originally posted by: tchouch

    Very helpfull, but there are some little bugs:
    in case IDC_BUTTON_OPEN:
    1. change : if ( hFile )
    to: if ( hFile != INVALID_HANDLE_VALUE)
    2. FILE_SHARE_WRITE option may be dangerous;
    3. change: if( hFile == NULL )
    to: if( hFile == INVALID_HANDLE_VALUE)

    All hFile = NULL and if(hFile) etc. should be changed to
    hFile = INVALID_HANDLE_VALUE or if(hFile != INVALID_HANDLE_VALUE ) too.

    Reply
  • Nice code.

    Posted by Legacy on 06/01/2002 12:00am

    Originally posted by: Dinu Scobici

    Nice code. Thanx.

    Reply
  • use EDITBIN

    Posted by Legacy on 05/28/2002 12:00am

    Originally posted by: that

    The tool EDITBIN, which comes with MSVC, can change this and other flags.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • When individual departments procure cloud service for their own use, they usually don't consider the hazardous organization-wide implications. Read this paper to learn best practices for setting up an internal, IT-based cloud brokerage function that service the entire organization. Find out how this approach enables you to retain top-down visibility and control of network security and manage the impact of cloud traffic on your WAN.

  • U.S. companies are desperately trying to recruit and hire skilled software engineers and developers, but there is simply not enough quality talent to go around. Tiempo Development is a nearshore software development company. Our headquarters are in AZ, but we are a pioneer and leader in outsourcing to Mexico, based on our three software development centers there. We have a proven process and we are experts at providing our customers with powerful solutions. We transform ideas into reality.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date