Я могу назвать API Win32 из Visual Studio Непосредственным Окном?

Выберите номер порта от 49 152 до 65 535.

IANA публикует список в настоящее время назначенных портов.

http://www.iana.org/assignments/port-numbers

Динамические и/или Частные порты являются Частными портами от 49 152 до 65 535. Это - диапазон от того, где НЕОБХОДИМО выбрать порт для внутренних приложений. Конечно, любой порт, принадлежащий одному из неназначенных диапазонов в опубликованном списке, может использоваться. Но знайте что путем выбора номера порта от тех неназначенных диапазонов нет никакой гарантии вообще, что порт, который Вы выбираете, не будет зарезервированным портом в будущем.

НЕНАЗНАЧЕННЫЕ НОМЕРА ПОРТОВ НЕ ДОЛЖНЫ ИСПОЛЬЗОВАТЬСЯ. IANA ПРИСВОИТ НОМЕР ДЛЯ ПОРТА ПОСЛЕ ТОГО, КАК ВАШЕ ЗАЯВЛЕНИЕ БУДЕТ ПРИНЯТО.

И удостоверяются, что номер порта, который Вы выбираете, настраивается, как Вы заявили:

, Что порт будет встроен в файлы конфигурации для сервиса и клиентов, которые используют сервис.

Это избежит головных болей в случае, если некоторая другая третья сторона you-cannot-touch программное обеспечение использует Ваш номер порта. Если это происходит, Вы просто идете вперед и изменяете его на конфигурационном файле, и это просто работает.

11
задан RichieHindle 21 August 2009 в 21:57
поделиться

3 ответа

Когда у вас есть функция адрес (как вы это сделали в обновленном вопросе), вы можете попробовать преобразовать его в указатель функции и вызвать его:

(*(BOOL (*)(HWND))0x76600454)((HWND)0x00021c0e)

Первая часть приводит адрес к BOOL (*) (HWND) , который является указателем на функцию, принимающую параметр HWND и возвращающую BOOL . Затем указатель на функцию разыменовывается и вызывается. Убедитесь, что параметры выставлены правильно, иначе могут случиться неприятности. В 64-битных системах HWND может быть 64-битным, поэтому вы не сможете обойтись без передачи параметра как int .

Изменить: См. Комментарии для полной истории.

5
ответ дан 3 December 2019 в 10:44
поделиться

Я считаю, что проблема в том, что C ++ EE не может разрешить контекст DestroyWindow. Попробуйте следующее

{,,user32}DestroyWindow(0x00021c0e);

Я не уверен, поддерживает ли синтаксис вызова метода этот стиль квалификации (раньше он использовался только для приведения типов). Но стоит попробовать.

РЕДАКТИРОВАТЬ Вам может потребоваться, а может и не потребоваться добавить! после закрытия}. Прошло некоторое время с тех пор, как я использовал этот синтаксис, и я часто путаю его с эквивалентным синтаксисом windbg.

2
ответ дан 3 December 2019 в 10:44
поделиться

Я нашел обходной путь, но все же предпочел бы получить Immediate Window

Обходной путь:

  • получить адрес функции, как показано в вопросе
  • , использовать окно Disassembly, чтобы перейти к этому адресу, и поставить там точку останова
  • сделать что-нибудь с приложение, чтобы вызвать DestroyWindow
  • шаг назад вверх по стеку вызовов к вызывающему DestroyWindow , который выглядит следующим образом:

    6D096A9D push ecx
    6D096A9E call dword ptr ds: [6D0BB4B8h]

  • установите точку останова на инструкции push ecx и очистите ее на DestroyWindow

  • , нажмите «Продолжить» и снова сделайте что-нибудь с приложением, заставьте его вызвать этот код
  • запишите значение ecx
  • измените значение ecx в отладчике на желаемое значение и перейдите к push / call
  • ] восстановите значение ecx и используйте инструкцию Set Next, чтобы вернуться к push , затем продолжить

. Это долго, но работает. Предполагается, что вы можете заставить приложение вызывать соответствующий API по желанию.

1
ответ дан 3 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: