- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
class LoaderLock
{
public:
void lock();
void unlock();
bool IsLocked() const;
LoaderLock() = default;
private:
LoaderLock(LoaderLock&) = delete;
LoaderLock(LoaderLock&&) = delete;
LoaderLock& operator=(LoaderLock&) = delete;
LoaderLock& operator=(LoaderLock&&) = delete;
bool _Locked = false;
ULONG _cookie = 0;
std::unique_ptr<void, std::function<void(void*)>> _ntdll{ LoadLibrary("NTDLL.DLL"), [](void* h){if (h)FreeLibrary((HMODULE)h); } };
typedef NTSTATUS(__stdcall*LdrLockLoaderLockFunc)(
ULONG Flags,
ULONG *State,
ULONG *Cookie);
LdrLockLoaderLockFunc _LdrLockLoaderLock = !_ntdll ? 0 : (LdrLockLoaderLockFunc)GetProcAddress((HMODULE)_ntdll.get(), "LdrLockLoaderLock");
typedef NTSTATUS(__stdcall*LdrUnlockLoaderLockFunc)(
ULONG Flags,
ULONG Cookie);
LdrUnlockLoaderLockFunc _LdrUnlockLoaderLock = !_ntdll ? 0 : (LdrUnlockLoaderLockFunc)GetProcAddress((HMODULE)_ntdll.get(), "LdrUnlockLoaderLock");
};
Уже давно минул 2014 год, а C++11 не перестает радовать нас размазанными по интерфейсу конструкторами и деструкторами.
LispGovno 18.05.2015 22:19 # 0
bormand 18.05.2015 22:45 # 0
LispGovno 18.05.2015 22:47 # +1
DlangGovno 18.05.2015 22:50 # +1
DlangGovno 18.05.2015 23:00 # +1
http://pastebin.com/fsEZ3Avr
codemonkey 18.05.2015 22:47 # +1
Как хорошо быть Си мастер рейс.
LispGovno 18.05.2015 22:56 # +1
Кем и почему? ну и лучше unique_ptr<void, void(*)(void*)>
LispGovno 18.05.2015 23:02 # 0
Xom94ok 18.05.2015 23:05 # +4
Yo dawg
Полное API, наверное, выглядит так:
LdrLockLoaderLock
LdrUnlockLoaderLock
LdrLockLoaderUnlock
LdrUnlockLoaderUnlock
LdrLockUnloaderLock
LdrUnlockUnloaderLock
LdrLockUnloaderUnlock
LdrUnlockUnloaderUnlock
Ловить дедлок в такой схеме, наверное, было бы равноценно потеряться в пятимерном пространстве.
bormand 18.05.2015 23:32 # +4
kegdan 18.05.2015 23:06 # +3
bormand 18.05.2015 23:06 # +2
LispGovno 18.05.2015 23:12 # +1
bormand 18.05.2015 23:17 # +1
А этот лок нереентерабельный?
LispGovno 18.05.2015 23:22 # +1
bormand 18.05.2015 23:23 # +1
bormand 18.05.2015 23:19 # +2
И при этом выглядит как ёбаный пиздец, угу. Моё Library по крайней мере хоть какие-то зайчатки инкапсуляции и удобства показывает...
bormand 18.05.2015 23:14 # +1
LispGovno 18.05.2015 23:23 # +3
Тебя походу торкнули фигурные скобки
bormand 18.05.2015 23:29 # +3
bormand 18.05.2015 23:46 # +2
LispGovno 19.05.2015 00:00 # 0
kegdan 19.05.2015 08:59 # 0
bormand 19.05.2015 09:19 # +1
kegdan 19.05.2015 10:13 # 0
bormand 19.05.2015 10:25 # 0
kegdan 19.05.2015 10:27 # 0
Пытаюсь юзерскипты поставить
inkanus-gray 19.05.2015 20:46 # 0
kegdan 19.05.2015 22:07 # 0
Stertor 19.05.2015 22:10 # −1
Я даже прокси-чекер накомпелял, но девайся нет, тоска.
kegdan 19.05.2015 22:23 # +3
Stertor 19.05.2015 22:52 # 0
http://implement.do.am/Images/6545435345.png
Прога должна была увидеть свет пару лет назад. Проект изначально разрабатывался на AutoIt, потом был переписан на PureBasic и наконец на Delphi. Затем я взялся переписывать код на FreePascal, чтобы прогу можно было безбоязненно распространять, но встретил на пути слишком много препятствий.
Stallman 19.05.2015 22:56 # 0
Stertor 19.05.2015 22:59 # −2
bormand 19.05.2015 22:15 # 0
kegdan 19.05.2015 22:25 # 0
chtulhu 20.05.2015 10:20 # 0
1024-- 20.05.2015 07:25 # 0
kegdan 20.05.2015 07:30 # 0
Чет мне кажется что наш уютненький не поддерживает нормального апи так что придётся парсить хтмл ручками
bormand 20.05.2015 07:33 # 0
Креститься надо. Само собой не поддерживает... Но, с другой стороны, тут няшный xhtml, который вполне жрётся xml парсерами.
kegdan 20.05.2015 07:37 # 0
bormand 20.05.2015 08:09 # 0
kegdan 20.05.2015 08:40 # 0
В любом случае сейчас у меня предсессия, потоп в конце июня сессия, так что пока запишу в хотели, если не обленюсь буду летом пилить
Stallman 20.05.2015 10:02 # 0
Где здесь пропущена запятая?
kegdan 20.05.2015 10:06 # 0
Других ошибок нет
dxd 21.05.2015 23:47 # 0
1024-- 20.05.2015 07:35 # 0
Мда. Главное - сделать парсилку потоньше, а то вдруг API добавят.
kegdan 20.05.2015 07:39 # 0
laMer007 20.05.2015 13:28 # 0
bormand 20.05.2015 13:34 # 0
Имхо, вреда от API не будет - все, кто хотел, уже ботов написали.
Vasiliy 20.05.2015 12:03 # 0
kegdan 20.05.2015 12:05 # 0
Василий, подробнее
Vasiliy 20.05.2015 13:18 # 0
bormand 20.05.2015 13:36 # 0
kegdan 20.05.2015 15:06 # 0
Vasiliy 20.05.2015 15:07 # 0
Бля а я то все думал, что это все тот же чел, только после обострения.
ШОК за Семена в ГК срал его злой брат близнец. [u]Смотреть онлайн (Только для владельцев платных аккаунтов)[u]
kegdan 19.05.2015 11:30 # 0
defecate-plusplus 19.05.2015 11:40 # 0
kegdan 19.05.2015 11:41 # 0
Безумие, да?)
defecate-plusplus 19.05.2015 11:56 # +1
Since this app is more a pilot study than a real product I worked on Tampermonkey for Dolphin browser quite a while and found recently the time to bring it into a beta state. You can get it from here:
https://play.google.com/store/apps/details?id=net.tampermonkey.dolphin
учитывая, что ему ещё и браузер особенный нужен...
ЗАТО БЕСПЛАТНО!
kegdan 19.05.2015 11:59 # 0
может мозилка и грейсманки под ведром смогут?
Dummy00001 20.05.2015 10:30 # 0
потому что ты обработку ошибок забыл.
bormand 20.05.2015 10:50 # 0
Dummy00001 20.05.2015 11:00 # 0
ну ты как бы сверху и привел часть их реализации. GetProcAddr() без проверки возврата непредсказуемая штука.
ЗЫ по моему опыту такой syntax sugar только частично помогает. грабли наступают тогда когда в разных версиях виндов у функций аргументы (и/или их типы) меняются. и версию виндов надо динамичски проверять...
bormand 20.05.2015 11:16 # +1
А насчёт разных аргументов можно вот так попробовать (искуственный пример):
bormand 20.05.2015 11:19 # 0
TarasB 20.05.2015 11:56 # +3
bormand 20.05.2015 13:39 # 0
Dummy00001 20.05.2015 12:13 # 0
bormand 20.05.2015 12:47 # 0
Dummy00001 20.05.2015 13:15 # +2
только в прикладухе народ усиленно страдает "не хочу ничего про систему слышать и видеть, лучше еще какую библиотечку качнуть".
laMer007 20.05.2015 13:41 # 0
Dummy00001 20.05.2015 14:35 # 0
либа решает виндово-специфические проблемы. на каком линухе класс проблем "недокументированые функции кернела и трахания с их вызовом" просто отсутствует. (все что нужно есть в хидерах, а новые фишки можно вызвать с помощью syscall() макро из libc.)
а если это какой плагиновый интерфейс, то есть более простые способы доступа, нежели чем куча GetProcAddr()/dlsym().
laMer007 20.05.2015 13:33 # 0
bormand 20.05.2015 14:37 # 0
laMer007 21.05.2015 01:29 # 0
bormand 21.05.2015 06:43 # 0
kegdan 21.05.2015 06:48 # 0
bormand 21.05.2015 06:55 # 0
kegdan 21.05.2015 07:01 # +1
kegdan 21.05.2015 07:02 # 0
laMer007 21.05.2015 08:30 # 0
Перегрузкой оператора() выберется нужная версия SetCurrentDirectory
Dummy00001 20.05.2015 14:39 # +2
Xom94ok 20.05.2015 18:30 # +1
Я бы вообще предпочел загрузить только юникодную функцию и перегонять в неё из utf8.
bormand 20.05.2015 11:00 # 0
Если required и не нашлась функция или либа - кидаем исключение сразу.
Если не required и не нашлась - кидаем исключение при вызове оператором (). Можно проверить оператором bool(), чтобы понять, есть ли эта функция в данной версии либы.
Dummy00001 20.05.2015 11:06 # 0
laMer007 20.05.2015 13:35 # 0
А то ведь везде где вызываешь расставлять ловлю исключений на тот случай если не загрузилась функция - та ещё упоротость
bormand 20.05.2015 13:47 # 0
А если флаг required установлен - то исключение вылетит в момент конструирования, где его несложно поймать (или не ловить).
Как-то так я себе это представлял ;)
laMer007 20.05.2015 14:09 # 0
laMer007 20.05.2015 14:13 # 0
Odin 03.11.2018 17:21 # 0
Распидорашу, если ещё раз меня так назовёшь.
Кстати, почему ты и Тарас так любите меня называть хуем?
bormand 20.05.2015 13:53 # 0
crastinus 20.05.2015 14:34 # 0
bormand 20.05.2015 14:41 # 0
laMer007 20.05.2015 15:04 # 0
TarasB 19.05.2015 15:42 # 0
bormand 19.05.2015 16:52 # 0
kegdan 19.05.2015 18:04 # 0
1024-- 19.05.2015 18:27 # +1
1024-- 19.05.2015 18:27 # +1
1024-- 19.05.2015 18:27 # +1
1024-- 19.05.2015 18:28 # +1
1024-- 19.05.2015 18:32 # 0
Появление комментариев на ГК подобно испарению/кристаллизации. Нужен какой-то центр, вокруг которого начнёт расти кристалл дискуссии. Ну или, если сравнивать с испарением, центр парообразования дискуссии.
В выходные посетители обычно уходят с работы и не участвуют в обсуждениях, на ГК остаются только школьники, с этим ничего не поделать. А вот если календарь не показывает никаких праздников, надо начинать флудить и троллить, а не просто периодически обновлять сток, ведь все обновляют сток и не пишут комментарии, если им не на что ответить.
kegdan 19.05.2015 18:39 # 0
1024-- 19.05.2015 18:47 # +1
kegdan 19.05.2015 18:55 # +1
TarasB 20.05.2015 11:11 # 0
bormand 20.05.2015 14:42 # 0
P.S. Код не taras-safe, слишком длинные строки.
TarasB 21.05.2015 11:45 # 0
bormand 21.05.2015 12:04 # 0
LoadLibrary("NTDLL.DLL"),
[](void* h){if (h)FreeLibrary((HMODULE)h); }
};
> шаблон нужен лишь чтобы можно было пихать и функции, и лямбды, и std::function
И даже аллаха, если у него есть operator ().
TarasB 21.05.2015 12:23 # 0
> (HMODULE)h
Забавно, везде такие шаблоны модные, а при использовании всё равно сишный говнокаст писать.
laMer007 21.05.2015 12:26 # 0
bormand 21.05.2015 12:29 # +1
Если точнее - T*, где T* - что-нибудь, во что может кастануться указатель на первый аргумент. Насчёт возврата void - х.з., должен проканать и не void, просто заигнорит результат.
В общем это функция, которую unique_ptr будет вызывать для освобождения указателя.
> сишный говнокаст
Причём этот HMODULE и есть void *, емнип.
laMer007 21.05.2015 12:28 # 0
bormand 21.05.2015 12:30 # +1
Мне? :) Не надо мне приписывать код ОП'а...
greenx 19.05.2015 19:34 # +2
laMer007 19.05.2015 19:39 # +1
kegdan 19.05.2015 19:45 # +1
kegdan 19.05.2015 19:39 # 0
inkanus-gray 19.05.2015 20:43 # +3
bormand 19.05.2015 20:54 # +2
fxd
inkanus-gray 19.05.2015 20:58 # 0
Xom94ok 19.05.2015 22:04 # +2
Stallman 21.05.2015 13:24 # 0