Портирование NotesAPI и WinAPI под x64

savl

Lotus Team
28.10.2011
2 624
314
BIT
524
Проблема со всеми функциями или только с user32 для getWindow ?
 

duchan

Green Team
20.09.2006
128
11
BIT
239
Все не проверял, но работа с реестром и процессами (RegOpenKey - RegQueryValueEx, CreateProcessA + остальные проверить не получится поскольку эта не запускает процесс и пида нет) - работают не корректно... ;(
работа с окнами, как-то работает и даже что-то возвращает, но тормозит безбожно...
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
524
За реест не скажу, а вот с одной функций был прикол.

Вместо GetActiveWindow надо использовать GetFocus, хз как и что, но в windows 7 она стала неверно работать.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
232
advapi32 на x64 не работает, я пытался реанимировать здесь, но не смог.
Хотел найти альтернативы, м.б. на Java, но тогда не нашёл.

Из перечисленных эти функции у нас задекларированы, вроде ничего не отвалилось:
Visual Basic:
Declare Function WaitForSingleObject Lib "kernel32" Alias "WaitForSingleObject" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long

Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (Byval hwnd As Long, Byval lpClassName As String, Byval nMaxCount As Long) As Long
Declare Function GetWindow Lib "user32" Alias "GetWindow" (Byval hwnd As Long, Byval wCmd As Long) As Long

Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (Byval hwnd As Long, Byval lpString As String, Byval cch As Long) As Long
Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (Byval hwnd As Long, Byval lpString As String) As Long


@savl
>> Declare Private Function GetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Long
> Вместо GetActiveWindow надо использовать GetFocus, хз как и что, но в windows 7 она стала неверно работать.

У нас для popup'ов GetActiveWindow работает на Win7, вроде никто не жаловался...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
466
Конкретно, что нужно вызвать вместо advapi32, чтобы получить тот же результат (нужно поддерживать обратную совместимость подписей)?
извини - я чёт окосел - не на то ответил...
какие ф-ции надо "заменять"?
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
232
какие ф-ции надо "заменять"?
Норм)

Эти:
Visual Basic:
Declare Private Function W32CryptAcquireContext Lib "Advapi32" Alias "CryptAcquireContextA"(phProv As Long, Byval pszContainer As Lmbcs String, Byval pszProvider As Lmbcs String, Byval dwProvType As Long, Byval dwFlag As Long) As Long
Declare Private Function W32CryptCreateHash Lib "Advapi32" Alias "CryptCreateHash"(Byval hProv As Long, Byval Algid As Long, Byval hKey As Long, Byval dwFlag As Long, phHash As Long) As Long
Declare Private Function W32CryptHashData Lib "Advapi32" Alias "CryptHashData"(Byval hHash As Long, Byval addr_data As Long, Byval dwSize As Long, Byval dwFlag As Long) As Long
Declare Private Function W32CryptGetHashParam Lib "Advapi32" Alias "CryptGetHashParam"(Byval hHash As Long, Byval dwParam As Long, buffer As Long, dwSize As Long, Byval dwFlag As Long) As Long
Declare Private Function W32CryptDestroyHash Lib "Advapi32" Alias "CryptDestroyHash"(Byval hHash As Long) As Long
Declare Private Function W32CryptReleaseContext Lib "Advapi32" Alias "CryptReleaseContext"(Byval hProv As Long, Byval dwFlags As Long) As Long

Declare Private Function W64CryptAcquireContext Lib "Advapi32" Alias "CryptAcquireContextA"(phProv As Double, ByVal pszContainer As LMBCS String, ByVal pszProvider As LMBCS String, ByVal dwProvType As Long, ByVal dwFlag As Long) As Long
Declare Private Function W64CryptCreateHash Lib "Advapi32" Alias "CryptCreateHash"(ByVal hProv As Double, ByVal Algid As Long, ByVal hKey As Double, ByVal dwFlag As Long, phHash As Double) As Long
Declare Private Function W64CryptHashData Lib "Advapi32" Alias "CryptHashData"(ByVal hHash As Double, ByVal addr_data As Long, ByVal dwSize As Long, ByVal dwFlag As Long) As Long
Declare Private Function W64CryptGetHashParam Lib "Advapi32" Alias "CryptGetHashParam"(ByVal hHash As Double, ByVal dwParam As Long, buffer As Long, dwSize As Long, ByVal dwFlag As Long) As Long
Declare Private Function W64CryptDestroyHash Lib "Advapi32" Alias "CryptDestroyHash"(ByVal hHash As Double) As Long
Declare Private Function W64CryptReleaseContext Lib "Advapi32" Alias "CryptReleaseContext"(ByVal hProv As Double, ByVal dwFlags As Long) As Long
Хотя может быть я просто для x64 неправильно задекларировал...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
466
Норм)

Эти:
Visual Basic:
Declare Private Function W32CryptAcquireContext Lib "Advapi32" Alias "CryptAcquireContextA"(phProv As Long, Byval pszContainer As Lmbcs String, Byval pszProvider As Lmbcs String, Byval dwProvType As Long, Byval dwFlag As Long) As Long
Declare Private Function W32CryptCreateHash Lib "Advapi32" Alias "CryptCreateHash"(Byval hProv As Long, Byval Algid As Long, Byval hKey As Long, Byval dwFlag As Long, phHash As Long) As Long
Declare Private Function W32CryptHashData Lib "Advapi32" Alias "CryptHashData"(Byval hHash As Long, Byval addr_data As Long, Byval dwSize As Long, Byval dwFlag As Long) As Long
Declare Private Function W32CryptGetHashParam Lib "Advapi32" Alias "CryptGetHashParam"(Byval hHash As Long, Byval dwParam As Long, buffer As Long, dwSize As Long, Byval dwFlag As Long) As Long
Declare Private Function W32CryptDestroyHash Lib "Advapi32" Alias "CryptDestroyHash"(Byval hHash As Long) As Long
Declare Private Function W32CryptReleaseContext Lib "Advapi32" Alias "CryptReleaseContext"(Byval hProv As Long, Byval dwFlags As Long) As Long

Declare Private Function W64CryptAcquireContext Lib "Advapi32" Alias "CryptAcquireContextA"(phProv As Double, ByVal pszContainer As LMBCS String, ByVal pszProvider As LMBCS String, ByVal dwProvType As Long, ByVal dwFlag As Long) As Long
Declare Private Function W64CryptCreateHash Lib "Advapi32" Alias "CryptCreateHash"(ByVal hProv As Double, ByVal Algid As Long, ByVal hKey As Double, ByVal dwFlag As Long, phHash As Double) As Long
Declare Private Function W64CryptHashData Lib "Advapi32" Alias "CryptHashData"(ByVal hHash As Double, ByVal addr_data As Long, ByVal dwSize As Long, ByVal dwFlag As Long) As Long
Declare Private Function W64CryptGetHashParam Lib "Advapi32" Alias "CryptGetHashParam"(ByVal hHash As Double, ByVal dwParam As Long, buffer As Long, dwSize As Long, ByVal dwFlag As Long) As Long
Declare Private Function W64CryptDestroyHash Lib "Advapi32" Alias "CryptDestroyHash"(ByVal hHash As Double) As Long
Declare Private Function W64CryptReleaseContext Lib "Advapi32" Alias "CryptReleaseContext"(ByVal hProv As Double, ByVal dwFlags As Long) As Long
Хотя может быть я просто для x64 неправильно задекларировал...
навскидку - java crypto API
сделать раперы и пустышки для совместимости по вызовам
по наполнению ЕМНИП у МС достаточно старые/известные алгоритмы были, т.е. не должны быть сильно оригинальными
но вот детали реализации (результат) - это надо сравнивать...
вот напоминающий запрос
по джава типа
 
  • Нравится
Реакции: VladSh

savl

Lotus Team
28.10.2011
2 624
314
BIT
524
LS64BITCCALLOUTPointerSupport с какой версии? У нас 9.0.1 FP8, чего-то такого не помню. У нас сервера только на винде.
c 9.0 и 853fp3 , параметр не был описан особо, можно было только от техподдержки получить.
Nash писал в 2014 году,
36-й слайд, там же , ранее по документу есть упоминание, что раз адресация стала 64 бита, то все указатели при вызове из LS должны быть заменены с long на double для x64.
Но так как клиент остался до сих пор x86 и могут быть сервера x86 , то необходимо иметь два набора кода, для разных версий.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
232
@savl
Я не парился по поводу этого параметра. Не знаю, зачем он нужен. У нас смешанная среда - серваки все на 9.0.1 FP8 x64, а клиенты большая часть на 8.5.3 FP6 и некоторые на 9.0.1 FP8, - всё работает норм и без этого параметра.

> все указатели при вызове из LS должны быть заменены с long на double для x64
Некоторые указатели я конечно заменил, но далеко не все, а лишь небольшую часть. Может с параметром и надо менять "все", не знаю. Где заменил, а где код переписал на чистый LS. Работает - и ладно.
 

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
43
LS64BITCCALLOUTPointerSupport? У нас 9.0.1 FP8, чего-то такого не помню. У нас сервера только на винде.
На линукс с пользой заюзал:)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!