author | Michael Krelin <hacker@klever.net> | 2011-04-27 14:18:48 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2011-04-27 14:18:48 (UTC) |
commit | c3b240e06bae3b663505e2b1c52eb67c34ddd3ea (patch) (side-by-side diff) | |
tree | 06793f5d56a8129bfdaaee441fc34fbb361ddb13 | |
parent | d097b824b7fcad001c9581fb2e322bf3e3e5961d (diff) | |
download | pumpkin-c3b240e06bae3b663505e2b1c52eb67c34ddd3ea.zip pumpkin-c3b240e06bae3b663505e2b1c52eb67c34ddd3ea.tar.gz pumpkin-c3b240e06bae3b663505e2b1c52eb67c34ddd3ea.tar.bz2 |
network settings: bind to specific ip address
Signed-off-by: Michael Krelin <hacker@klever.net>
-rwxr-xr-x[-rw-r--r--] | PropsNetwork.cpp | 3 | ||||
-rwxr-xr-x[-rw-r--r--] | PropsNetwork.h | 1 | ||||
-rwxr-xr-x | PumpKINDlg.cpp | 16 | ||||
-rwxr-xr-x[-rw-r--r--] | PumpKINDlg.h | 1 | ||||
-rw-r--r-- | help/pumpkin.rtf | 43 | ||||
-rw-r--r-- | help/pumpkin.xml | 1 | ||||
-rw-r--r-- | pumpkin.clw | 12 | ||||
-rwxr-xr-x[-rw-r--r--] | pumpkin.rc | 30 | ||||
-rwxr-xr-x[-rw-r--r--] | resource.h | 5 |
9 files changed, 64 insertions, 48 deletions
diff --git a/PropsNetwork.cpp b/PropsNetwork.cpp index b5585d7..2dd5913 100644..100755 --- a/PropsNetwork.cpp +++ b/PropsNetwork.cpp @@ -25,2 +25,3 @@ CPropsNetwork::CPropsNetwork() : CPropertyPage(CPropsNetwork::IDD) m_BlockSize = 0;
+ m_ListenAddress = _T("");
//}}AFX_DATA_INIT
@@ -45,2 +46,4 @@ void CPropsNetwork::DoDataExchange(CDataExchange* pDX) DDX_Text(pDX, IDC_BLOCKSIZE, m_BlockSize);
+ DDX_Text(pDX, IDC_LISTENADDRESS, m_ListenAddress);
+ DDV_MaxChars(pDX, m_ListenAddress, 15);
//}}AFX_DATA_MAP
diff --git a/PropsNetwork.h b/PropsNetwork.h index 67d0b53..565b090 100644..100755 --- a/PropsNetwork.h +++ b/PropsNetwork.h @@ -26,2 +26,3 @@ public: UINT m_BlockSize;
+ CString m_ListenAddress;
//}}AFX_DATA
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp index 3ff1500..0c5c19b 100755 --- a/PumpKINDlg.cpp +++ b/PumpKINDlg.cpp @@ -1230,2 +1230,3 @@ CPropsACL acl; network.m_ListenPort=m_ListenPort;
+ network.m_ListenAddress=m_ListenAddress;
network.m_SpeakPort=m_SpeakPort;
@@ -1253,2 +1254,3 @@ CPropsACL acl; m_ListenPort=network.m_ListenPort;
+ m_ListenAddress=network.m_ListenAddress;
m_SpeakPort=network.m_SpeakPort;
@@ -1877,2 +1879,3 @@ CWinApp *app = AfxGetApp(); m_ListenPort=app->GetProfileInt("TFTPSettings","ListenPort",m_ListenPort);
+ m_ListenAddress=app->GetProfileString("TFTPSettings","ListenAddress",m_ListenAddress);
m_LogLength=app->GetProfileInt("UISettings","LogLength",m_LogLength);
@@ -1907,2 +1910,3 @@ CWinApp *app = AfxGetApp(); app->WriteProfileInt("TFTPSettings","ListenPort",m_ListenPort);
+ app->WriteProfileString("TFTPSettings","ListenAddress",m_ListenAddress);
app->WriteProfileInt("UISettings","LogLength",m_LogLength);
@@ -2069,9 +2073,4 @@ BOOL CListenSocket::SetListen(BOOL b) { ASSERT(m_Daddy);
- if(b==m_bListen)
- return TRUE;
- if(b) {
- if(!Create(m_Daddy->m_ListenPort,SOCK_DGRAM))
- return FALSE;
- return m_bListen=TRUE;
- }else{
+ if(b==m_bListen) return TRUE;
+ if(!b) {
Close(); m_bListen=FALSE;
@@ -2079,2 +2078,5 @@ BOOL CListenSocket::SetListen(BOOL b) { }
+ return m_bListen=Create(m_Daddy->m_ListenPort,SOCK_DGRAM,
+ FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE,
+ m_Daddy->m_ListenAddress.IsEmpty()?NULL:(LPCTSTR)m_Daddy->m_ListenAddress);
}
diff --git a/PumpKINDlg.h b/PumpKINDlg.h index 23c2657..9077292 100644..100755 --- a/PumpKINDlg.h +++ b/PumpKINDlg.h @@ -433,2 +433,3 @@ public: UINT m_ListenPort;
+ CString m_ListenAddress;
UINT m_BlockSize;
diff --git a/help/pumpkin.rtf b/help/pumpkin.rtf index 8358490..39fc02a 100644 --- a/help/pumpkin.rtf +++ b/help/pumpkin.rtf @@ -16,7 +16,7 @@ K{\footnote about} { \f1\fs18\b\sb120 About {\b PumpKIN}}
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b PumpKIN} is a program designed to send and receive files over the net while having {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} session running using {\i TFTP} ({\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")}) protocol. It includes full-functional {\i TFTP} server/client so it may be useful for maintaining {\uldb CISCO}{\v %!ExecFile("http://www.cisco.com/")} routers and other network equipment.
-\par\sa120\sb120\qj\pard \f1\fs18\sb120
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b {\i Enjoy!}}
+\par\sa120\sb120\qj \f1\fs18\sb120 {\b PumpKIN} is a program designed to send and receive files over the net while having {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} session running using {\i TFTP} ({\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")}) protocol. It includes full-functional {\i TFTP} server/client so it may be useful for maintaining {\uldb CISCO}{\v %!ExecFile("http://www.cisco.com/")} routers and other network equipment. +\par\sa120\sb120\qj \f1\fs18\sb120 +\par\sa120\sb120\qj \f1\fs18\sb120 {\b {\i Enjoy!}} {
-\par\pard\plain\sb360\sa120 \f1\fs16 Copyright (c) 1997-2006 {\uldb\cf0 Klever Group (http://www.klever.net/)}{\v %!ExecFile("http://www.klever.net/")}
+\par\pard\plain\sb360\sa120 \f1\fs16 Copyright (c) 1997-2011 {\uldb\cf0 Klever Group (http://www.klever.net/)}{\v %!ExecFile("http://www.klever.net/")} \par\qj\sb120\sa120Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@@ -30,2 +30,4 @@ K{\footnote about} ${\footnote What's New}
+\par\pard\plain\f1\fs24\qc\cf2\b 2.7.2.1 - Apr 27th, 2011 +\par\pard\plain\fi0\li0\f1\fs18 \bullet Fixed a minor bug that lead to misdiagnosis of the packet from unexpected source \par\pard\plain\f1\fs24\qc\cf2\b 2.7.2 - October 18th, 2006
@@ -63,7 +65,7 @@ ${\footnote Using PumpKIN} { \f1\fs18\b\sb120 Using {\b PumpKIN}}
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 This is a simple program for file exchange between two parties. It allows you to send files over the network to your party while having a {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} conversation. It uses open sessions to determine IP address of your party. Also you may use it as a {\i TFTP} client/server by itself. To get/put files from/to {\i TFTP} server you need to enter host name/IP address manually in the {\uldb Request Dialog}{\v Request}.
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click {\b Abort xfer} button.
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 You may want to hide {\b PumpKIN} window and leave it as a tray icon only. Just click the \{bmct pumpkin.bmp\} icon in the tray or simply close the window.
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 Use {\uldb Options}{\v Options} button to set {\b PumpKIN} options.
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can start and stop {\b PumpKIN}'s {\i TFTP} server by checking and unchecking the {\b Server is running} checkbox in the lower right corner of main {\b PumpKIN} window.
+\par\sa120\sb120\qj \f1\fs18\sb120 This is a simple program for file exchange between two parties. It allows you to send files over the network to your party while having a {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} conversation. It uses open sessions to determine IP address of your party. Also you may use it as a {\i TFTP} client/server by itself. To get/put files from/to {\i TFTP} server you need to enter host name/IP address manually in the {\uldb Request Dialog}{\v Request}. +\par\sa120\sb120\qj \f1\fs18\sb120 To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click {\b Abort xfer} button. +\par\sa120\sb120\qj \f1\fs18\sb120 You may want to hide {\b PumpKIN} window and leave it as a tray icon only. Just click the \{bmct pumpkin.bmp\} icon in the tray or simply close the window. +\par\sa120\sb120\qj \f1\fs18\sb120 Use {\uldb Options}{\v Options} button to set {\b PumpKIN} options. +\par\sa120\sb120\qj \f1\fs18\sb120 You can start and stop {\b PumpKIN}'s {\i TFTP} server by checking and unchecking the {\b Server is running} checkbox in the lower right corner of main {\b PumpKIN} window. \page
@@ -74,3 +76,3 @@ ${\footnote Confirm Read Request Dialog} { \f1\fs18\b\sb120 Confirm Read Request Dialog}
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 When the file is requested from your {\i TFTP} server you may choose to {\b Grant Access} to this file or to {\b Deny Access}. If you hesitate to answer for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeout} ({\i default - 30 seconds}) {\b PumpKIN} defaults to denial of all requests.
+\par\sa120\sb120\qj \f1\fs18\sb120 When the file is requested from your {\i TFTP} server you may choose to {\b Grant Access} to this file or to {\b Deny Access}. If you hesitate to answer for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeout} ({\i default - 30 seconds}) {\b PumpKIN} defaults to denial of all requests. \page
@@ -81,3 +83,3 @@ ${\footnote Confirm Write Request Dialog} { \f1\fs18\b\sb120 Confirm Write Request Dialog}
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 Whenever your party sends you a file you have always a choice to accept it or not. You can also save the file under a different name by choosing the {\b Rename} option. If you already have file with such name you may chose to {\b resume} transfer. No checking on file contents is done. This option may or may not work depending on remote implementation of protocol. It does work if you use {\b PumpKIN} on both ends. If you are still unsure for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeOut} ({\i default - 30 seconds}) {\b PumpKIN} will make safe decision for you (deny).
+\par\sa120\sb120\qj \f1\fs18\sb120 Whenever your party sends you a file you have always a choice to accept it or not. You can also save the file under a different name by choosing the {\b Rename} option. If you already have file with such name you may chose to {\b resume} transfer. No checking on file contents is done. This option may or may not work depending on remote implementation of protocol. It does work if you use {\b PumpKIN} on both ends. If you are still unsure for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeOut} ({\i default - 30 seconds}) {\b PumpKIN} will make safe decision for you (deny). \page
@@ -88,3 +90,3 @@ ${\footnote Request Dialog} { \f1\fs18\b\sb120 Request Dialog}
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 Request dialog is aimed to let you form read or write request. You may set the following options:\pard
+\par\sa120\sb120\qj \f1\fs18\sb120 Request dialog is aimed to let you form read or write request. You may set the following options:\pard \par \fi0\li0 \bullet {\b Local File} - You can change the name of the file you're sending (or destination in case you're receiving) right here. You may also use {\b Browse} button to select the file.
@@ -100,3 +102,3 @@ ${\footnote Options} { \f1\fs18\b\sb120 Options}
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b PumpKIN} options property sheet consists of two tabs. For more information see {\uldb {\b Network}}{\v NetworkOptions} and {\b Server} options.
+\par\sa120\sb120\qj \f1\fs18\sb120 {\b PumpKIN} options property sheet consists of two tabs. For more information see {\uldb {\b Network}}{\v NetworkOptions} and {\b Server} options. \page
@@ -109,2 +111,3 @@ ${\footnote Network Options} \par \fi0\li0 \bullet {\b Listen for incoming connections on port} - specifies the port we're listening to. The default as defined in {\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")} is 69.
+\par \fi0\li0 \bullet {\b ip address} - ip address to listen to. \par \fi0\li0 \bullet {\b Send outgoing requests to port} - specifies the port we're going to send all requests to.\pard
@@ -130,4 +133,4 @@ ${\footnote Sounds Options} { \f1\fs18\b\sb120 Sounds}
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can customize {\b PumpKIN} sounds notifications here. There are three customizable sounds defined - {\b Incoming request}, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. {\b xfer Aborted} - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. {\b xfer Finished} means that your file was successfully transmitted.
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can select any {\b .wav} file or one of the predefined sounds from the dropdown list.
+\par\sa120\sb120\qj \f1\fs18\sb120 You can customize {\b PumpKIN} sounds notifications here. There are three customizable sounds defined - {\b Incoming request}, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. {\b xfer Aborted} - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. {\b xfer Finished} means that your file was successfully transmitted. +\par\sa120\sb120\qj \f1\fs18\sb120 You can select any {\b .wav} file or one of the predefined sounds from the dropdown list. \page
@@ -138,7 +141,7 @@ ${\footnote Access Lists} { \f1\fs18\b\sb120 Access Lists}
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can slightly automate your access policies by setting up read/write request behavior for different incoming requests.
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 The rule consists of {\b request type}, source network ({\b ip} and {\b netmask}) and {\b action} to take (see also {\uldb Server Options}{\v ServerOptions}).
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 When {\b PumpKIN} receives request it goes through the list of rules and bases its decision on the first matching rule. To rearrange order of rules, select the rule you wish to move and use up and down arrows buttons on the right. To remove rule, use the cross button.
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 To add a new rule fill in the information about {\b request type}, source {\b address} and {\b netmask} and desired action. Then click on the 'Add new rule' button.
-\par\sa120\sb120\qj\pard \f1\fs18\sb120 If you wish to amend the rule, select it in the rules list, change parameters below and click the 'Replace rule' button.
+\par\sa120\sb120\qj \f1\fs18\sb120 You can slightly automate your access policies by setting up read/write request behavior for different incoming requests. +\par\sa120\sb120\qj \f1\fs18\sb120 The rule consists of {\b request type}, source network ({\b ip} and {\b netmask}) and {\b action} to take (see also {\uldb Server Options}{\v ServerOptions}). +\par\sa120\sb120\qj \f1\fs18\sb120 When {\b PumpKIN} receives request it goes through the list of rules and bases its decision on the first matching rule. To rearrange order of rules, select the rule you wish to move and use up and down arrows buttons on the right. To remove rule, use the cross button. +\par\sa120\sb120\qj \f1\fs18\sb120 To add a new rule fill in the information about {\b request type}, source {\b address} and {\b netmask} and desired action. Then click on the 'Add new rule' button. +\par\sa120\sb120\qj \f1\fs18\sb120 If you wish to amend the rule, select it in the rules list, change parameters below and click the 'Replace rule' button. \page
diff --git a/help/pumpkin.xml b/help/pumpkin.xml index 2e53edd..153219a 100644 --- a/help/pumpkin.xml +++ b/help/pumpkin.xml @@ -83,2 +83,3 @@ <li><b>Listen for incoming connections on port</b> - specifies the port we're listening to. The default as defined in <rfc num="1350"/> is 69.</li>
+ <li><b>ip address</b> - ip address to listen to.</li>
<li><b>Send outgoing requests to port</b> - specifies the port we're going to send all requests to.</li>
diff --git a/pumpkin.clw b/pumpkin.clw index 213d8c1..7fa927b 100644 --- a/pumpkin.clw +++ b/pumpkin.clw @@ -4,3 +4,3 @@ Version=1
-LastClass=CPumpKINDlg
+LastClass=CPropsNetwork
LastTemplate=CComboBox
@@ -16,3 +16,3 @@ ResourceCount=10 Resource1=IDD_REQUEST
-Resource2=IDD_PROPS_NETWORK
+Resource2=IDD_PUMPKIN_DIALOG
Resource3=IDD_CONFIRM_RRQ
@@ -35,3 +35,3 @@ Class13=CPropsACL Class14=CACLTargetCombo
-Resource10=IDD_PUMPKIN_DIALOG
+Resource10=IDD_PROPS_NETWORK
@@ -112,3 +112,3 @@ Type=1 Class=CPropsNetwork
-ControlCount=15
+ControlCount=17
Control1=IDC_STATIC,button,1342177287
@@ -128,2 +128,4 @@ Control14=IDC_BLOCKSIZE,edit,1350639744 Control15=IDC_BSIZESPIN,msctls_updown32,1342177463
+Control16=IDC_STATIC,static,1342308354
+Control17=IDC_LISTENADDRESS,edit,1350631552
@@ -145,3 +147,3 @@ Filter=D VirtualFilter=idWC
-LastObject=IDC_BLOCKSIZE
+LastObject=IDC_LISTENADDRESS
diff --git a/pumpkin.rc b/pumpkin.rc index f52c4bd..babd066 100644..100755 --- a/pumpkin.rc +++ b/pumpkin.rc @@ -168,26 +168,28 @@ FONT 8, "MS Sans Serif" BEGIN
- GROUPBOX "UDP Ports",IDC_STATIC,7,7,286,40
+ GROUPBOX "UDP Ports",IDC_STATIC,7,7,286,55
RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13,
18,135,8
- EDITTEXT IDC_LISTENPORT,154,16,40,13,ES_AUTOHSCROLL
+ EDITTEXT IDC_LISTENPORT,154,16,61,13,ES_AUTOHSCROLL
CONTROL "Spin1",IDC_LISTENSPIN,"msctls_updown32",UDS_WRAP |
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
- UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,16,11,13
- RTEXT "Send &outging requests to port:",IDC_STATIC,13,31,135,8
- EDITTEXT IDC_SPEAKPORT,154,29,40,13,ES_AUTOHSCROLL
+ UDS_ARROWKEYS | UDS_NOTHOUSANDS,204,16,11,13
+ RTEXT "Send &outging requests to port:",IDC_STATIC,13,46,135,8
+ EDITTEXT IDC_SPEAKPORT,154,44,61,13,ES_AUTOHSCROLL
CONTROL "Spin1",IDC_SPEAKSPIN,"msctls_updown32",UDS_WRAP |
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
- UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,29,11,13
- LTEXT "Default connection timeout:",IDC_STATIC,7,52,88,8
- EDITTEXT IDC_TIMEOUT,110,50,40,13,ES_AUTOHSCROLL | ES_NUMBER
+ UDS_ARROWKEYS | UDS_NOTHOUSANDS,204,43,11,13
+ LTEXT "Default connection timeout:",IDC_STATIC,7,66,88,8
+ EDITTEXT IDC_TIMEOUT,110,64,40,13,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "Spin3",IDC_TIMESPIN,"msctls_updown32",UDS_WRAP |
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
- UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,50,11,13
- LTEXT "Default block size:",IDC_STATIC,7,66,59,8
- LTEXT "seconds",IDC_STATIC,154,52,28,8
- LTEXT "bytes",IDC_STATIC,154,66,18,8
- EDITTEXT IDC_BLOCKSIZE,110,64,40,13,ES_AUTOHSCROLL | ES_NUMBER
+ UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,64,11,13
+ LTEXT "Default block size:",IDC_STATIC,7,80,59,8
+ LTEXT "seconds",IDC_STATIC,154,66,28,8
+ LTEXT "bytes",IDC_STATIC,154,80,18,8
+ EDITTEXT IDC_BLOCKSIZE,110,78,40,13,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "Spin3",IDC_BSIZESPIN,"msctls_updown32",UDS_WRAP |
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
- UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,64,11,13
+ UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,78,11,13
+ RTEXT "ip address:",IDC_STATIC,13,32,135,8
+ EDITTEXT IDC_LISTENADDRESS,154,28,61,14,ES_AUTOHSCROLL
END
diff --git a/resource.h b/resource.h index 7961e5e..2c2fa02 100644..100755 --- a/resource.h +++ b/resource.h @@ -153,2 +153,3 @@ #define IDC_LOGFILE_BROWSE 1054
+#define IDC_LISTENADDRESS 1055
#define ID_TRAY_HELP 32771
@@ -167,5 +168,5 @@ #ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 155
+#define _APS_NEXT_RESOURCE_VALUE 156
#define _APS_NEXT_COMMAND_VALUE 32781
-#define _APS_NEXT_CONTROL_VALUE 1055
+#define _APS_NEXT_CONTROL_VALUE 1056
#define _APS_NEXT_SYMED_VALUE 102
|