Createfilea failed during opening disk tsclient error 2 сбербанк



Проблемка Рутокен TLS от Сбер через RDP

Сообщений 4

#1 Тема от Алёшка 2022-11-08 15:01:55

  • Алёшка
  • Посетитель
  • Неактивен

Проблемка Рутокен TLS от Сбер через RDP

Доброго времени суток!
Помогите, пожалуйста, победить такую задачку:
Нужно заставить работать веб клиент-банк СБЕР с токеном TLS через RDP.
Рутокен TLS
Номер токена: TLS0993230561 (по данным веб приложения сбера)
Версия прошивки: 537/0 (по данным веб приложения сбера)

Терминальный сервер:
ОС Win Server 2019 Standard v.1809 build 17763.3532
CryptoPro CSP 5.0.12330 КС1
Драйвер Рутокен 4.12.0.0

Рабочая станция
ОС Win 10 22H2 build 19045.2130
CryptoPro CSP 5.0.12330 КС1
Драйвер Рутокен 4.12.0.0

Рутокен пробрасывается на терминал и есть возможность открыть файловое содержимое, при попытке запустить start.exe получаем ошибку:

CreateFileA failed during opening disk \\.\\\tsclient. Error: 2

При работе с токенами TLS сбера другого производителя удаётся корректно работать с клиент-банком через терминал, запуская приложение вышеописанным способом.

#2 Ответ от Николай Киблицкий 2022-11-08 16:32:13

  • Николай Киблицкий
  • Техническая поддержка
  • Неактивен

Re: Проблемка Рутокен TLS от Сбер через RDP

Здравствуйте Алёшка.
По вопросам поддержки продукта «Рутокен TLS» необходимо обращаться в техническую поддержку «Сбербанк».
Телефон для обращений 8-800-5555-777 доб.3, или с мобильного 0321.

Рутокен TLS не работает по RDP.
Режим работы с использованием удаленного подключения для Рутокен TLS не предусмотрен и не поддерживается.

#3 Ответ от Алёшка 2022-11-09 09:11:36

  • Алёшка
  • Посетитель
  • Неактивен

Re: Проблемка Рутокен TLS от Сбер через RDP

Николай Киблицкий, Понято, принято! Гранд мерси!

Источник

Сбой CreateFile с кодом ошибки 2, пока файл существует

Я пытаюсь открыть существующий файл через CreateFile, но он всегда терпит неудачу с errorcode 2 — Как файл не существует, но он существует — он находится в папке с исполняемым файлом.

это не удастся, даже если я заменю argv[1] с жестко закодированной строкой имени файла.
приложение работает в качестве администратора.

Решение

Код ошибки является точным. Файл не найден Возможные объяснения включают в себя:

  • Вы использовали неправильное имя файла.
  • Вы использовали относительный путь, и рабочий каталог процесса не соответствует ожидаемому.

Если вы хотите интерпретировать имя файла как относительное к каталогу, в котором находится исполняемый файл, сделайте это. Сформируйте абсолютный путь из каталога, содержащего исполняемый файл и указанное имя файла.

Нет никаких оснований ожидать, что рабочий каталог процесса будет каталогом, в котором находится исполняемый файл.

Другие решения

Вы пытаетесь открыть файл, используя относительный путь. Относительные пути относительно текущего рабочего каталога (см. GetCurrentDirectory ). Текущий рабочий каталог не обязательно является каталогом, в котором находится исполняемый образ. Он может отличаться по ряду причин, например:

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

Если вы хотите открыть файл, расположенный относительно исполняемого образа приложения, вам необходимо создать полное имя пути, основанное на расположении исполняемого файла и желаемом имени файла. Следующий код извлекает каталог исполняемого файла 1) :

Это можно использовать следующим образом:

1) Код, ориентированный на Windows 8 и более поздние версии, должен использовать PathCchRemoveFileSpec а также PathCchAddBackslash вместо.

Источник

Ошибки TLS при работе в Сбербанк Бизнес Онлайн

Такая неприятность, как ошибки TLS при работе в Сбербанк Бизнес Онлайн – это та проблема, с которой хотя бы раз сталкивался каждый клиент сервиса.

К слову, в последнее время именно дистанционное управление бизнесом приобрело огромную популярность. И многие клиенты Сбербанка уже успели оценить столь высокое удобство данной системы, а именно заполнение платёжных поручений не выходя из офиса в автоматическом режиме, управление счетами в режиме онлайн, отсутствие необходимости в посещении банка и так далее. Однако здесь, как и в любой иной системе, есть свои сбои и нюансы. Так, наиболее частые проблемы, связанные с данной системой – это ошибки TLS соединений, которые, тем не менее, всегда можно исправить.

Ошибки TLS соединений в Сбербанк Бизнес Онлайн

Конечно, предусмотреть и описать здесь все ошибки невозможно, однако давайте разберем самые наиболее часто встречающиеся.

Ошибки соединения Сбербанк Бизнес Онлайн

Ошибка 0140 или, по-другому, ошибка соединения. Причин для таковой ошибки может быть несколько. И одна из самых часто встречаемых – это просто сбои в программе.

Однако еще чаще такая проблема может возникать из-за цифровой электронной подписи. Данная подпись является аналогом обычной подписи и используется тогда. Когда нужно подписать и удостоверить какие-то документы. Поэтому ошибку система выдаст в том случае, если подпись устарела, и более она не действительна. Тогда ее клиенту следует обновить.

Однако бывает, что срок печати еще не истек – тогда нужно будет проверить, насколько точно вы заполнили все поля. Вполне возможно, что для прикрепления подписи вам просто нужно установить Capicom. И тогда проблема решится еще проще.

Однако, какой бы не была причина, нужно как можно быстрее ее решать и обращаться в службу поддержки за помощью, сообщив код ошибки и те действия, которые вы выполняли до того, как была совершена ошибка. А чтобы в дальнейшем вы не столкнулись с данной проблемой, нужно точно знать, когда именно истекает ее срок годности.

Проблема номер 0100

Данную ошибку система может выдать в том случае, если у вас появились проблемы с сертификатом. Так, при входе в Бизнес Онлайн осуществляется проверка, а затем и подтверждение ее подлинности. Сервер Сбербанка проверяет, насколько действителен сертификат, до какого срока он действует, а затем сравнивает адрес с тем адресом, который указан в сертификате.

Ошибка TLS 0140

Как уже и было сказано ранее, причин таковой ошибки может быть множество, начиная с обычного сбоя в системе и заканчивая банальной «просрочкой» электронной подписи.

Проблема номер 0160

В том случае, если системе выдается данная ошибка, то это говорит лишь об одном – о том, что система не может проверить подлинность сертификата клиента. То есть закончилось действие пин-кода. Для того, чтобы возобносить работу системы, нужно обратиться в банк для восстановления пин-кодов либо токена.

Другие возможные проблемы

Так же во время работы с системой могут возникнуть следующие проблемы:

  • Вы неправильно ввели пароль либо логин при входе в систему. Это говорит о том, что вы действительно ввели что-то не так. Данная проблема решается очень просто – вам нужно будет попросту перезагрузить страницу, вновь войти и ввести данные, но при этом быть максимально аккуратным и внимательным.
  • Так же существует ошибка 401, которая выходит тогда, когда клиент банка входит в систему. Основная причина здесь – это сбой в работе вашего компьютера. Здсь существует множество вариантов решения данной проблемы – например, переустановить браузер, либо попросту обновить страницу.
  • Так называемая ошибка контроля. Она возникает в том случае, если вы, заполняя какой-то платежный документ, допустили в нем ошибки. При этом система считает данный документ как неактуальный для вас. Для того, чтобы данная проблема была устранена, нужно проверить все те поля, которые были вами введены, затем исправить те пункты, которые были заполнены неверно, и еще раз установить проверку документа.
Читайте также:  Error 2 не удается найти указанный файл при удалении

  • Как вариант, может возникнуть внутренняя ошибка данного сервера. Здесь вам вообще не нужно беспокоиться, а лишь стоит дождаться, когда будут решены все проблемы. Кроме того, вам нужно сообщить о сложившейся ситуации службе техподдержки.

Источник

MySQL — How to solve ‘Failed to open file error 2’

Posted on Nov 03, 2021

Learn how to fix ‘Failed to open file error 2’ in MySQL

When you try to run an SQL file using mysql command line program, you may encounter an error saying Failed to open file error 2 .

The following example tries to run the source command and execute the query.sql file:

The code error 2 means that MySQL can’t find the .sql file that you want to execute.

To solve this error, you need to provide the absolute path to your file location.

You can find the absolute path of your file by opening the terminal in the directory or folder where your SQL file is located and run the pwd command.

For example, here’s the absolute path to the directory where I save the query.sql file:

Now I just need to add the path to the file when I issue the source command:

Please note that you need to use forward slashes ( / ) to separate your path sections. Using back slashes ( \ ) may cause the same error.

Here’s an example:

Even though the path is correct, MySQL expects a Unix-style path with forward slashes.

You should now be able to execute the SQL file. There are some other causes for error 2 in MySQL, so let’s take a look at that next.

Error 2 because of symbols

Another thing that could cause the error is that you’re adding the greater than > or less than symbol in front of the file path as shown below:

The greater than or less than symbol is commonly used to dump MySQL data to an SQL file or execute a script from the terminal without connecting to MySQL server.

You need to remove the symbol to execute the source command without error.

Error 2 because of semicolon when using \. command

The \. command is an alias of the source command that you can use to run an SQL file.

I don’t know if it’s a MySQL bug, but when you run the \. command with a semicolon ; at the end of the file path, you’ll get the error 2 response.

Take a look at the following example:

But the same error won’t happen when you use the source command:

To solve this issue, you need to omit the semicolon when you’re using the \. command.

And that’s how you fix the MySQL failed to open file error 2 issue.

Just keep in mind that the error is because MySQL can’t find the file you want to execute.

You probably need to check the path you passed into the source command and see if there’s any typo that causes the error.

Level up your programming skills

I’m sending out an occasional email with the latest programming tutorials. Drop your email in the box below and I’ll send new stuff straight into your inbox!

About

Nathan Sebhastian is a software engineer with a passion for writing tech tutorials.
Learn JavaScript and other web development technology concepts through easy-to-understand explanations written in plain English.

Источник

Сбербанк или туда и обратно

ГЛАВА 1. Нежданные гости

Все началось в то злополучное утро, когда Project Manager сообщил, что сроки реализации проекта должны быть быстро и решительно сокращены на месяц. Точнее говоря проект должен быть готов через 4 дня. Нет, наш PO не зверь, и ничуть не похож на сову (разве что чуть-чуть на ворона), просто так сложилось. Ну раз надо, так надо, тем более что команде (а я являюсь ведущим разработчиком команды «С») было обещано что-то вкусное. На часах и календаре был четверг, 11:00, к понедельнику проект должен быть готов.

Для начала, чем мы вообще занимаемся. Мы занимаемся автоматизацией кинотеатров — автоматическим и дистанционным управлением оборудования, автоматизацией кинопоказа, мониторингом, видеопанелями, а теперь еще и терминалами продажи билетов и бара. Конкретно последнему пункту и посвящена данная статья.

Сам проект, который нужно было завершить до понедельника представляет из себя некую прослойку между основным сервером на Scala и железным терминалом оплаты VeriFone VX 820 (на самом деле терминалов больше, но для примера возьмем только его). Понятно, что просто так проводить через него транзакции нам никто не даст, поэтому используются утилиты и библиотеки Сбербанка/Arcus и UCS. Таким образом схема работы в итоге должна быть следующей:

Внешне он выглядит вот так:

Также данная подсистема должна использоваться на стандартных кассовых машинах которые все видели в любом кинотеатре у кассиров.

Согласно внутренней традиции каждый проект нашей команды мы называем именем из древнескандинавской мифологии, для данной подсистемы было выбрано имя Gefjon — Имя богини плодородия и изобилия (неплохое название для сервера оплаты, разве нет? Ну и легенда о быках отрезающих остров идеально ложится на текущую архитектуру, отрезая работу с оборудованием от высокоуровневого языка).

Формат входящих и выходящих сообщений — HTTP сервер с JSON нагрузкой. Это оптимальный компромисс между Scala, которой сложно опуститься до вычленения бинарных данных из socket-потоков и C, которому трудно подняться до передачи объектов через сеть. Возможных операций, которыми необходимо оперировать не так много: оплата, отмена, возврат, разные типы отчетов, открытие сервисного меню и ping. С виду ничего сложного. Так как банковских систем целых три (а в последствии ожидается пополнение семейства), то было решено разделить проект на компоненты:

Читайте также:  Mtp error from remote mail server after mail from

Зеленым покрашены блоки, которые нам нужно было сделать, синим — те, которые нельзя поменять и которые предоставляет банк.

Так как основные проблемы возникли только с ПО от Сбербанка, то статья в целом будет посвящена подводным камням, которые мы пересчитали своей ладьей.

ГЛАВА 2. Баранье жаркое


(фото: heaclub.ru)

… выглядит примерно так. Примерно так же выглядел код того прототипа, который был написан несколько месяцев назад для того, чтобы дать понять всем вышестоящим людям, что мы можем работать с банковскими приложениями.

Понятное дело, что для Production варианта это не годилось, поэтому нужно было по сути написать все заново.

Каждый банк, который предоставляет библиотеки для работы с терминалом обычно предоставляет два варианта подключения: через функции библиотеки (.so/.dll) или посредством готовой утилиты, которой всего-то нужно передать два значения — тип операции и сумму (когда нужно). В теории ничего сложного, всего-то

Результат операции при этом будет помещен в файл «e», а слип-чек — в файл «p». Просто отправим эти файлы на stdout с преобразованием в JSON, чтобы HTTP-сервер просто отправил их наверх как payload без размышлений о том, что там.

Но эта статья не вышла бы, если бы все было так просто.

ГЛАВА 4. Через гору и под горой

Первоначальный вариант реализации представлял из себя простой вызов приложения — HTTP-сервер вызывал нужную обертку с унифицированными параметрами (например X-отчет это 4), а утилита например gfj_pilot запускала sb_pilot с параметром, который требовался для это операции (например X-отчет это 9). Затем утилита-обертка читала из е-файла результат операции (например 2000 — «отказ оплаты, повторите операцию») и преобразовывала в универсальную ошибку (например 3 — «Ошибка чтения или процессинга карты/счета, повторите операцию»). После этого файл «p» преобразовывался в base64 для избежания ломания форматирования и отсылался вместе с результатом в stdout в виде JSON.

Все это прекрасно работало, пока в один прекрасный момент нам не сообщили, что…

… это не работает под Windows.

Ну точнее у самого Windows проблем нет (кроме того, что слип генерируется в кодировке Cp-1251, а консоль работает в CP866). Просто не генерировался «е» файл. Запустили банковскую утилиту напрямую:

Действительно, «e»-файла нет. Камень в сторону Сбербанка #1. Пишем письмо в сбербанк (впоследствии получили ответ, что так и должно быть), а так как времени на переписку нет и надо запускаться вот прям уже, ищем обходные пути получения результата.

Ага, результат можно получить из лога sbkernelГГММ.log. Неудобно, плюс нет хеша карты чтобы впоследствии прикрутить «Спасибо» от сбербанка. Не годится.

Придется подключаться к библиотеке pilot_nt.dll и импортировать из нее функции. Все бы ничего, но… Камень в сторону Сбербанка #2: под Linux такой библиотеки нет, придется создавать два разных приложения под разные платформы — для linux вызывать утилиту sb_pilot (аналог loadparm.exe, кстати камень #3 за разное название утилиты под разными платформами), под windows подключаться к библиотеке pilot_nt.dll.

ГЛАВА 5. Загадки в темноте

Сбербанк — компания крупная, большинство программных решений производятся по ГОСТам и формальным документам. Залезаем в каталог, который поставляет Сбербанк вместе с библиотеками:

Куча добра, однако нас интересует только каталог для разработчиков:

Много макулатуры, на всякий случай еще раз перечитаем pilot_nt, из которой узнаем следующее:

Таблица 1. Поддерживаемые sb_pilot ОС.

ОС Разрядность Имя модуля
Windows 32 sb_pilot.exe
Linux 32 sb_pilot
DOS 16 sb_pilot.exe

Передача результатов работы программы.

По окончании работы программы формируются два текстовых файла — файл обмена и файл чека.

Первый имеет имя e и предназначен для передачи вызывающей программе параметров совершенной операции. Первая строка в этом файле содержит код результата операции, и через запятую – поясняющее текстовой сообщение. Код 0 означает успешное проведение платежа, любое другое значение – отказ или невозможность проведения платежа.

Лениво кидаем еще один камень и начинаем изучать документацию на подключение библиотеки напрямую.

При оплате (возврате) покупки по банковской карте кассовая программа должна вызвать из библиотеки Сбербанка функцию card_authorize(), заполнив поля TType и Amount и указав нулевые значения в остальных полях. По окончании работы функции необходимо проанализировать поле RCode. Если в нем содержится значение «0» или «00», авторизация считается успешно выполненной, в противном случае отклоненной. Кроме этого, необходимо проверить значение поля Check.

Если оно не равно NULL, его необходимо отправить на печать (в нефискальном режиме) и затем
удалить вызовом функции GlobalFree(). При закрытии смены кассовая программа должна вызвать из библиотеки Сбербанка функцию close_day(), заполнив поле TType = 7 и указав нулевые значения в остальных полях. По окончании работы функции необходимо проверить значение поля Check.

Если поле Check не равно NULL, его необходимо отправить на печать (в нефискальном режиме) и после этого удалить вызовом функции GlobaFree().

Звучит несложно, даже хэдер файл предоставлен. Что ж, подключаем его, компилируем и…

Эммм… Что? Открываем pilot_nt.h:

Сразу, не глядя камень за комментарии на русском в кодировке CP1251.

Ну и самый серьезный камень: дорогие разработчики на С++. Если вы пишете extern «C» — это означает, что код внутри блока должен компилироваться С-компилятором. Если вы НЕ сделали `typedef` структуры, то при каждом ее упоминании в качестве указания типа необходимо писать ключевое слово `struct`.

Патчим файл для разработчиков, подставляя везде, где нужно слово `struct`. Линкуемся с библиотекой `pilot_nt.dll`. Победа, не? Запускаем наше приложение.

ГЛАВА 6. Из огня да в полымя

Ну вы поняли, да? Приложение просто падает. Сразу, до main. Медитируем, добавляем NIH-аналог функции errno для windows: GetLastError (камень #3 в сторону Microsoft, первые два за кодировки).

0xc0000096? А разве GetLastError не должна возвращать адекватный код ошибки?

For a complete list of error codes provided by the operating system, see System Error Codes.

The following topics provide lists of system error codes. These values are defined in the WinError.h header file.

  • System Error Codes (0-499) (0x0-0x1f3)
  • System Error Codes (500-999) (0x1f4-0x3e7)
  • System Error Codes (1000-1299) (0x3e8-0x513)
  • System Error Codes (1300-1699) (0x514-0x6a3)
  • System Error Codes (1700-3999) (0x6a4-0xf9f)
  • System Error Codes (4000-5999) (0xfa0-0x176f)
  • System Error Codes (6000-8199) (0x1770-0x2007)
  • System Error Codes (8200-8999) (0x2008-0x2327)
  • System Error Codes (9000-11999) (0x2328-0x2edf)
  • System Error Codes (12000-15999) (0x2ee0-0x3e7f)
Читайте также:  Error code 409 telegram bot python

Отлично, мы получили незадокументированную ошибку, кидаем камень и открываем всезнающий google:

  • _inp()
  • _inpw()
  • _inpd()
  • _outp()
  • _outpw()
  • _outpd()

Использование которых запрещено под NT-ядрами, так как они пытаются работать с параллельным портом напрямую. Судя по всему этот код вызывается в инициализаторе библиотеки, т.е. библиотека при старте хочет опросить порты на наличие устройств, но NT-ядро требует работы через драйвер.

ГЛАВА 8. Пауки и мухи

22:00. На всякий случай возникает идея проверить, что это не из-за того, что мы используем кросскомпиляцию с Linux с помощью mingw. Параллельно понимаем, что Сбербанк поставляет только 32хбитное приложение, поэтому слинковаться с 64хбитным приложением не выйдет, ну ладно, но все равно запустим камень в сторону Сбербанка за 32-only версию в 2019м году.

Дано: установленная в virtualbox windows 7;
Необходимо: установить Visual Studio и скопилировать MVP.

Заходим на сайт Microsoft, качаем Visual Studio 2017. Берем лицензию сообщества, так как мы берем ее для проверки, для бизнеса лицензия будет куплена, если взлетит.
Скачиваем несколько сотен мегабайт и…

Видим, что наша версия ОС (Windows 7) не поддерживается.

Ок, идем на всякие непотребные сайты, ищем Visual Studio 2008, скачиваем несколько сотен мегабайт заново и…

Получаем iso файл.

Ладно, попытаемся установить Daemon Tools 10 (так как это та версия, которую предлагает сайт), чтобы вставить этот виртуальный диск.

Запускаем скачанный бинарь. Осечка, требуется .NET Framework 4.5, скачиваем, ставим.
Запускаем скачанный бинарь, установка началась, загрузчик говорит что ему нужна 4.5.2, скачиваем, ставим.
Запускаем скачанный бинарь, установка началась, загрузчик говорит что никуда не поедет, пока мы не поставим обновление безопасности KB3033929, скачиваем, ставим.

И получаем оплеуху от Microsoft в виде сообщения:

Яростно кидаем очень острый камень в сторону Microsoft, качаем с торрентов старый Daemon Tools, успешно распаковываем Visual Studio, устанавливаем, наконец-таки (00:00) компилируем MVP, получаем такую же ошибку. Что ж, хорошая была версия, но не срослось.

ГЛАВА 11. На пороге

Пишем второму программисту, который в этот момент в срочном порядке допиливает сервер и процедуру регистрации. Он вспоминает, есть гит-репозиторий, который на NT-подключает эту библиотеку и работает с ней.

Подозрительно глядя на репозиторий скачиваем его, компилируем и запускаем. Работает.

Еще более подозрительно смотрим на код. Код идентичен, разве что написан на C++ а не С.
Понимаем, что язык тут не причем. Смотрим библиотеки сбербанка, которые тянет за собой код.
Видим последний коммит.

И вот тут нас поджидает очередной сюрприз.

Оказывается, что версии библиотеки Сбербанка могут быть разными. Последний коммит увеличивает версию с 23 до 27й. Копируем себе на тестовый компьютер версию из гита — РАБОТАЕТ!

Проверяем все архивы, которые присылал Сбербанк, сравниваем версии и строим табличку:

Версия Работает
26.0.15 — Основная нет
27.4.12 — Из репозитория да
23.0.13 — Из репозитория да
29.0.9 — Самая свежая от СБ да
23.0.13 — С патчем для системы «Криптера» да

Отлично, вот теперь заживем. На тех системах где стоит 26 обновим до 29 или 27 и все взлетит.
Кидаем камень #9 в сторону Сбербанка за то, что сломали поведение на NT системах.

ГЛАВА 12. Что ждало их внутри

Не хватает «е» файла? Не беда, берем патченные заголовочники, динамически линкуемся с библиотекой чтобы корректно вернуть ошибку, пишем код, который просто запишет код возврата из функции в файл «е», назовем бинарь sb_pilot.exe и…

Работать-то оно работает.

Вот только на версии для системы «Криптера» не создается «р» файл.

Грустно смотрим на капающую по костяшкам кровь и на вмятину в стене.

Для начала, что такое система «Криптера».

Cryptera — это датская компания, выпускающая шифрующее оборудование/оборудование безопасности/ключи и пр. Думаю, что вы все видели один из экземпляров их продукции:

Так вот Сбербанк использует их криптомодуль для пинпадов и выпускает специальную «патченную» библиотеку, в которой, как мы уже поняли, не создается файл «р». Пишем по этому поводу в Сбербанк и через несколько дней получим ответ, что «под оригинальной системой файл „р“ будет создаваться, а под патченной на Криптеру — нет». Выдадим им камень # 10 через несколько дней, ведь работать нужно уже сейчас.

К счастью, или к несчастью, но функции, которые мы используем для проведения операций возвращают уже упомянутую структуру:

О, отлично, чек уже есть, можем сами сохранить его в файл или сразу вывести в JSON…

И получаем падение приложение из-за обращения по невалидному указателю.

ГЛАВА 14. Огонь и вода

[out] образ чека, должен освобождаться GlobalFree в вызывающей программе

Что это нам дает? Очень многое. Во-первых то, что раз указатель требует очистки с помощью GlobalFree то его саллоцировали с помощью GlobalAlloc. Следовательно она выдает не указатель на память, как было в 16битной версии, а номер объекта с семантически объявленым типом HGLOBAL, который можно скормить в функции GlobalSize чтобы получить размер выделенного блока и GlobalLock чтобы заблокировать кусок памяти, но получить оригинальный указатель. Кстати, камень #6 в сторону Microsoft за NIH malloc и free, которые есть в стандартной библиотеке.

И все равно получаем падение. Окей, а что показывае GlobalSize? Ноль? Как-то странно.

Проверяем другие функции, которые тоже должны отдавать слип — видим ту же картину.

В голову приходит разве что самостоятельно сгенерировать слип по тем данным, которые может выдать самая крутая функция оплаты (да, у Сбербанка функции именуются card_authorize2..14, камень кидать за это не буду):

Пробуем подбирать поля… Выясняем, что от счастья нас отделяло всего одно — Фамилия и Имя носителя карты. Без них слип не считается законным:

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

Жаль, но сформировать законный слип с теми данными, что у нас есть не получится.

Покопаемся в документации еще раз.

Находим пример, который Сбербанк поставляет в каталоге «examples»

Просто выводится текст, находящийся по указателю. Но ведь мы уже убедились, что так оно не работает… На всякий случай скомпилируем их пример и запустим. Вылет на строчке `file

Источник

Оцените статью
toolgir.ru
Adblock
detector