Инициализируйте переменную текущим значением даты, которое у вас есть для других регионов (должно быть в формате даты), и используйте метод .toUTCString()
.
Пример кода для IST к UTC приведен ниже:
var curdate = new Date("Fri Mar 29 2019 08:00:00 GMT+0530");
var UTCdate = curdate.toUTCString();
Нет. DLL_B
не будет разгружен. LoadLibrary()
назовите сделанными DLL_A
увеличит счетчик числа загрузок для DLL_B
. С тех пор нет никакого соответствия FreeLibrary()
призыв DLL_B
, refcount не перейдет к нулю.
От LoadLibrary () документы:
Система поддерживает подсчет ссылок для каждого процесса на всех загруженных модулях. Вызов LoadLibrary увеличивает подсчет ссылок. Вызов функции FreeLibrary или FreeLibraryAndExitThread постепенно уменьшает подсчет ссылок. Система разгружает модуль, когда его подсчет ссылок достигает нуля или когда процесс завершается (независимо от подсчета ссылок).
У Вас будет утечка дескриптора в случае:
Program -Load> Dll A
-Load> Dll B
-Unload> Dll A
Никакой код неявно не выполнен модулем, разгружаемым для разгрузки модулей, которые он загрузил.
Так как никакой код не выполнен для уменьшения подсчета ссылок, модуль B никогда не будет разгружаться.
Вот правила для загрузки / разгрузка dlls:
Все еще в памяти по сравнению со все еще загруженным:
Нет никакой гарантии, что Ваш модуль будет выпущен из памяти в определенное время, когда ссылка достигнет 0. Но необходимо рассмотреть модуль, как будто он разгружен, когда подсчет ссылок достигает 0.
Мешая DLL быть разгруженным:
Для принуждения DLL то, чтобы быть разгруженным, Вы могли попробовать
Править:
Вы упомянули, что Ваша цель к коду injet в под управлением программу и что Вы хотели пропустить дескриптор нарочно.
Это прекрасно, но если Вы выполняете эту операцию много, она может привести к катастрофическому отказу в Вашей исходной Программе, потому что будут использоваться слишком много дескрипторов, или в конечном счете слишком много памяти будет использоваться.
Можно возвратить FALSE от DllMain, чтобы мешать ему быть загруженными так, чтобы Вы не тратили впустую память. Вы делаете это, когда fdwReason является DLL_PROCESS_ATTACH. Можно читать больше об этом здесь.
При попытке эмулировать DLL и добавить в Вашей собственной дополнительной функциональности, то необходимо будет реализовать все функции, что источник, реализации DLL и делегируют каждого, отзывает к источнику DLL.
Считайте раздел Remarks для подробного объяснения.
Ключевая вещь отметить:
Система поддерживает подсчет ссылок для каждого процесса для каждого загруженного модуля
и далее вниз
Когда подсчет ссылок модуля достигает нуля, или процесс завершается, система разгружает модуль от адресного пространства процесса
Из MSDN:
Освобождает загруженный модуль динамически подключаемой библиотеки (DLL) и, при необходимости, постепенно уменьшает его подсчет ссылок. Когда подсчет ссылок достигает нуля, модуль разгружен от адресного пространства обработки вызовов, и дескриптор больше не действителен.
DLLs в окнах являются считаемой ссылкой. Когда A разгружен, Вы постепенно уменьшаете подсчет ссылок на A, если он поразит нуль, то он разгрузится, и (принимающий ошибки в коде) постепенно уменьшают подсчет ссылок на B. Если refcount на B пойдет для обнуления его, то будет затем разгружен. Это - возможный DLL C, имеет refcount на B, и разгрузка A не разгрузит B.