// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

IDR_MENU_MAIN_UI MENU 
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "E&xit",                       ID_FILE_EXIT
    END
    POPUP "&Commands"
    BEGIN
        MENUITEM "&Spawn target",               ID_COMMANDS_SPAWNTARGET
    END
END


/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_LAUNCH_DLL DIALOGEX 0, 0, 269, 118
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "BrokerUI: Load an Attack DLL"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "Call now",IDOK,212,70,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,212,95,50,14
    EDITTEXT        IDC_DLL_NAME,7,43,200,13,ES_AUTOHSCROLL
    LTEXT           "DLL to load in target:",IDC_STATIC,7,33,168,8
    LTEXT           "Function to call:",IDC_STATIC,7,61,139,8
    EDITTEXT        IDC_ENTRY_POINT,7,71,200,13,ES_AUTOHSCROLL
    EDITTEXT        IDC_LOG_FILE,7,17,200,13,ES_AUTOHSCROLL
    LTEXT           "File for Target logging (optional):",IDC_STATIC,7,7,139,8
    PUSHBUTTON      "Browse...",IDC_BROWSE_DLL,212,42,50,14
    PUSHBUTTON      "Browse...",IDC_BROWSE_LOG,212,16,50,14
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO 
BEGIN
    IDD_LAUNCH_DLL, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 262
        TOPMARGIN, 7
        BOTTOMMARGIN, 111
    END
END
#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Icon
//

// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_SANDBOX             ICON                    "sandbox.ico"

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
    "#include ""windows.h""\r\n"
    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED

#endif    // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

