а как под ограниченной учетной записью привелегии получить?
» Вопросы по программированию на C/С++
kenny5705
Цитата:
В STL нет штатных средств преобразования, ЕМНИМС. Так что можно в сети какие-нибудь библиотечки поискать, а можно и самому функции преобразования написать. Что-нибудь вроде этого:
[more]
Код: wstring UTF8toW(string const &utf8)
{
wstring wstr;
int len=MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, NULL, 0);
if(len>0) {
wchar_t *buf=new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, buf, len);
wstr.assign(buf);
delete[] buf;
}
return wstr;
}
string WtoUTF8(wstring const &wstr)
{
string utf8;
int len=WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, NULL, 0, 0, 0);
if(len>0) {
char *buf=new char[len];
WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, buf, len, 0, 0);
utf8.assign(buf);
delete[] buf;
}
return utf8;
}
...
string find_str(WtoUTF8(L"<h2> <span class=\"mw-headline\"> Условие задачи </span></h2>"));
size_t found;
string lines;
while( !input_file.eof() )
{
getline( input_file, lines ); //возвращает в lines строку из файла
found = lines.find(find_str); //номер позиции содержащей данное выражение
//output_file << found << endl;
if( found != string::npos ) // если не равно значит есть такое выражение в строке есть
{
ident = 1;
output_file << WtoUTF8(L"<h2>Задача " << numbZad << "</h2>") << endl;
lines = find_str;
numbZad++;
};
};
Цитата:
Не подскажете как это можно попроще исправить, т.е чтоб программа читала и отправляла в кодировке UTF-8?
В STL нет штатных средств преобразования, ЕМНИМС. Так что можно в сети какие-нибудь библиотечки поискать, а можно и самому функции преобразования написать. Что-нибудь вроде этого:
[more]
Код: wstring UTF8toW(string const &utf8)
{
wstring wstr;
int len=MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, NULL, 0);
if(len>0) {
wchar_t *buf=new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, buf, len);
wstr.assign(buf);
delete[] buf;
}
return wstr;
}
string WtoUTF8(wstring const &wstr)
{
string utf8;
int len=WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, NULL, 0, 0, 0);
if(len>0) {
char *buf=new char[len];
WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, buf, len, 0, 0);
utf8.assign(buf);
delete[] buf;
}
return utf8;
}
...
string find_str(WtoUTF8(L"<h2> <span class=\"mw-headline\"> Условие задачи </span></h2>"));
size_t found;
string lines;
while( !input_file.eof() )
{
getline( input_file, lines ); //возвращает в lines строку из файла
found = lines.find(find_str); //номер позиции содержащей данное выражение
//output_file << found << endl;
if( found != string::npos ) // если не равно значит есть такое выражение в строке есть
{
ident = 1;
output_file << WtoUTF8(L"<h2>Задача " << numbZad << "</h2>") << endl;
lines = find_str;
numbZad++;
};
};
как вот это реализовать.
[more]
Очевидно искать лазейки много зависит от того самого админа от его уровня =)
Описание: Уязвимость обнаружена в ярлыках в Windows 2000/XP/2003. Локальный пользователь может, при некоторых условиях, поднять свои привилегии.
Уязвимость обнаружена в приложениях, взаимодействующих с отдельными процессами или библиотеками. При взаимодействии приложения с отдельным приложением, или библиотекой, то можно подменить адрес дочернего процесса, то есть местонахождение приложения или библиотеки. Проблема состоит в том, что часто при написании приложений указывается не полный путь к файлу, если файл находится в директории с вызываемым приложением, а указывается просто имя файла. Если же подменить в свойствах ярлыка путь к рабочей папке программы, то программа будет искать библиотеку не в своей папке, а том месте, которое указано в свойствах ярлыка (свойства ярлыка -> "Рабочая папка"). Тем самым можно подменить библиотеку (приложение, которое вызывается как дочерний процесс), и выполнить произвольный код. Взломщик, имея права с ограниченными привилегиями, и не имеющий права на запись в директории рассматриваемого приложения, может подменить местонахождение библиотеки и позднее, когда пользователь с административными правами запустит уязвимое приложение (при этом выполнится произвольный код), получить привилегии администратора. Практической реализации данной уязвимости не существует в настоящее время.
Подробности смотрите в источнике сообщения
URL производителя: http://www.Microsoft.Com
Решение:Способов устранения обнаруженной уязвимости не существует в настоящее время.
Уязвимость обнаружил Иван Жданов (dokk21@rambler.ru)
[/more]
http://otvet.mail.ru/question/38535092
ну создал я дллку с именем как у одной из системных. но при запуске приложение выдает ошибку - что такой функции в системной дллке нет. то есть она все таки обращается к системной а не той что лежит рядом в папке.
[more]
Очевидно искать лазейки много зависит от того самого админа от его уровня =)
Описание: Уязвимость обнаружена в ярлыках в Windows 2000/XP/2003. Локальный пользователь может, при некоторых условиях, поднять свои привилегии.
Уязвимость обнаружена в приложениях, взаимодействующих с отдельными процессами или библиотеками. При взаимодействии приложения с отдельным приложением, или библиотекой, то можно подменить адрес дочернего процесса, то есть местонахождение приложения или библиотеки. Проблема состоит в том, что часто при написании приложений указывается не полный путь к файлу, если файл находится в директории с вызываемым приложением, а указывается просто имя файла. Если же подменить в свойствах ярлыка путь к рабочей папке программы, то программа будет искать библиотеку не в своей папке, а том месте, которое указано в свойствах ярлыка (свойства ярлыка -> "Рабочая папка"). Тем самым можно подменить библиотеку (приложение, которое вызывается как дочерний процесс), и выполнить произвольный код. Взломщик, имея права с ограниченными привилегиями, и не имеющий права на запись в директории рассматриваемого приложения, может подменить местонахождение библиотеки и позднее, когда пользователь с административными правами запустит уязвимое приложение (при этом выполнится произвольный код), получить привилегии администратора. Практической реализации данной уязвимости не существует в настоящее время.
Подробности смотрите в источнике сообщения
URL производителя: http://www.Microsoft.Com
Решение:Способов устранения обнаруженной уязвимости не существует в настоящее время.
Уязвимость обнаружил Иван Жданов (dokk21@rambler.ru)
[/more]
http://otvet.mail.ru/question/38535092
ну создал я дллку с именем как у одной из системных. но при запуске приложение выдает ошибку - что такой функции в системной дллке нет. то есть она все таки обращается к системной а не той что лежит рядом в папке.
bomzzz
Во-первых, если DLL уже загружена другой программой, то она и используется. Во-вторых, если DLL находится в списке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs то она грузится оттуда, в третьих, вот это:
Цитата:
неправда, если DLL находится в папке с программой, то она имеет безусловный приоритет в загрузке, перехватом рабочей папки можно перенаправить загрузку только DLL, которые ищутся в системных папках.
Во-первых, если DLL уже загружена другой программой, то она и используется. Во-вторых, если DLL находится в списке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs то она грузится оттуда, в третьих, вот это:
Цитата:
Если же подменить в свойствах ярлыка путь к рабочей папке программы, то программа будет искать библиотеку не в своей папке,
неправда, если DLL находится в папке с программой, то она имеет безусловный приоритет в загрузке, перехватом рабочей папки можно перенаправить загрузку только DLL, которые ищутся в системных папках.
ну я и пытался подпихнуть программе дллку с системным именем. разные попробовал. ложил в папку с программой, при запуске программа выдавала, что в дллке нету вызываемой функции - то есть она все таки обращалась к системной, а не к той что в папке.
ни фига не вышло. начал уже разбираться с ZwQuerySystemInformation
я кстати взял прогу TuneUP - коммерческий продукт сурьезный, там процес експлорер тоже ни фига не показывает под ограниченной записью.
ни фига не вышло. начал уже разбираться с ZwQuerySystemInformation
я кстати взял прогу TuneUP - коммерческий продукт сурьезный, там процес експлорер тоже ни фига не показывает под ограниченной записью.
методом тыка wsock32.dll можно имя дать, только привелегии все равно не установились.
Abs62
Цитата:
ну да, самое лучшее что мне удалось нарыть это http://www.programmersclub.ru/Конвертирование-utf-8-в-windows-1251/
блин ты так то даешь, взял написал программу, и ведь работает, даж переделывать не пришлось, всю работу за меня сделал, весь кайф обломал млин...)))
ладно спасибо за помощь
как вариант кстати можно использовать консольные утилиты iconv или recode
Цитата:
В STL нет штатных средств преобразования, ЕМНИМС
ну да, самое лучшее что мне удалось нарыть это http://www.programmersclub.ru/Конвертирование-utf-8-в-windows-1251/
блин ты так то даешь, взял написал программу, и ведь работает, даж переделывать не пришлось, всю работу за меня сделал, весь кайф обломал млин...)))
ладно спасибо за помощь
как вариант кстати можно использовать консольные утилиты iconv или recode
никто загрузку процессора не считал? чета не получается у меня
может кто закинуть пару файлов из VC2010
mfc100.def
mfc100d.def
mfc100u.def
mfc100ud.def
(лучше все *.def из папки atlmfc)
благодарю
mfc100.def
mfc100d.def
mfc100u.def
mfc100ud.def
(лучше все *.def из папки atlmfc)
благодарю
Не могу понять, в чем проблема
Код: #define STR_A L"orange"
#define STR_B L"mandarin"
#define SUFFIX L" is sweet"
CStringW s1(STR_A);
CStringW s2(STR_A + SUFFIX); // ошибка
CStringW s3(STR_B + L" is sweet"); // ошибка
Код: #define STR_A L"orange"
#define STR_B L"mandarin"
#define SUFFIX L" is sweet"
CStringW s1(STR_A);
CStringW s2(STR_A + SUFFIX); // ошибка
CStringW s3(STR_B + L" is sweet"); // ошибка
V0lt
Цитата:
Равнозначны, если определено _UNICODE.
Код: #ifdef _UNICODE
...
#define __T(x) L ## x
...
#else /* ndef _UNICODE */
...
#define __T(x) x
...
#endif
Цитата:
Получается _T("orange") и L"orange" полностью равнозначны? Или нет?
Равнозначны, если определено _UNICODE.
Код: #ifdef _UNICODE
...
#define __T(x) L ## x
...
#else /* ndef _UNICODE */
...
#define __T(x) x
...
#endif
Abs62
Спасибо.
С конструктором я не самый удачный пример привел. У меня некая функция, которая на входе принимает строку.
Код: Func(STR_A + SUFFIX); // ошибка
Спасибо.
С конструктором я не самый удачный пример привел. У меня некая функция, которая на входе принимает строку.
Код: Func(STR_A + SUFFIX); // ошибка
V0lt
Цитата:
Можно. Надо просто учесть, что wchar_t* суммировать нельзя, а CString можно. Значит, нужно сделать явное преобразование.
Код: Func(CStringW(STR_A) + SUFFIX);
Цитата:
А компактнее возможно? Никак нельзя обойтись без s2 ?
Можно. Надо просто учесть, что wchar_t* суммировать нельзя, а CString можно. Значит, нужно сделать явное преобразование.
Код: Func(CStringW(STR_A) + SUFFIX);
Abs62
Спасибо, меня это устроит.
Спасибо, меня это устроит.
никто случайно не знает, разобрался с этой недокументированной фигней - ZwQuerySystemInformation, сделал, привилегий для получения информации о системных процессах не требуется. но эта функция возвращает информацию о всех системных процессах в одном блоке данных и хотя еще и возвращает его длину, вот только если запасти недостаточный буфер по размеру, его можно было БЫ скорректировать и вызвать функцию еще раз если бы за время вызова этой функции еще раз в системе не появились скажем еще процессы и размер опять увеличился. может есть какой то механизм чтоб знать сколько под нее места надо?
bomzzz
А документацию сложно прочитать?
Цитата:
А документацию сложно прочитать?
Цитата:
ReturnLength [out, optional]
An optional pointer to a location where the function writes the actual size of the information requested. If that size is less than or equal to the SystemInformationLength parameter, the function copies the information into the SystemInformation buffer; otherwise, it returns an NTSTATUS error code and returns in ReturnLength the size of buffer required to receive the requested information.
блин - первый раз ее вызвал получил размер буфера, зарезервировал размер требуемый вызываешь ее второй раз - но за время между вызовами размер может измениться. например вирус или программа какая то с ошибкой сама себя запускает и в секунду сотни новых процессов появляется
bomzzz
А ты хочешь функцию, которая может точно предсказать, сколько процессов будет в системе через N секунд? Таких не бывает.
А ты хочешь функцию, которая может точно предсказать, сколько процессов будет в системе через N секунд? Таких не бывает.
но в системе то они как то это реализовали. у меня неоднократно были ситуации когда из за ошибки в программе процессы плодились как кролики и менеджер задач запускался при этом. и функции типа CreateToolhelp32Snapshot как реализованы, что работают без ошибок
Добавлено:
можно поднять приоритет до реального времени между вызовами, или может как то можно узнать где этот буфер. или заблокировать запуск новых процессов. может кто то читал про это я нагуглить не могу ниче
Добавлено:
можно поднять приоритет до реального времени между вызовами, или может как то можно узнать где этот буфер. или заблокировать запуск новых процессов. может кто то читал про это я нагуглить не могу ниче
bomzzz
А в чем проблема? Выдели буфер сколько просит, если потом не хватает - выдели еще
А в чем проблема? Выдели буфер сколько просит, если потом не хватает - выдели еще
чтоб программа вообще не запустилась. а так и выделяла больше больше...
вот тут именно так и советуется, но это любительское мнение, меня бы утроило если бы так было сделано на мсдн
http://wasm.ru/print.php?article=drvw2k06
Цитата:
у себя проверил, на 15 процессов требуется - 19776, это если нет имен процессов с длиной MAX PATH (260) можно считать средним значением. под 1.5 кбайта на процесс хватит и с именем 260 байт. можно прибавить 150 кбайт к значению. тогда памяти гарантированно хватит, даже если программа запускает свою копию, а те в свою очередь делают тоже самое (5!=120). но все равно как то некрасиво, лучше было бы поднять статус процесса до реального времени. и все равно как то...
хотя скорее всего процессор будет уделять время сначала вновь начавшемуся процессу
вот тут именно так и советуется, но это любительское мнение, меня бы утроило если бы так было сделано на мсдн
http://wasm.ru/print.php?article=drvw2k06
Цитата:
Здесь я предполагаю, что между двумя вызовами ZwQuerySystemInformation в системе не появится ни одного нового модуля. Это весьма вероятно, т.к. случается не часто. В учебном примере это простительно, но в коде своего драйвера Вы можете использовать более надежный способ: вызывать ZwQuerySystemInformation в цикле, передавая ей каждый раз буфер большего размера, до тех пор, пока размер буфера не окажется достаточным.
у себя проверил, на 15 процессов требуется - 19776, это если нет имен процессов с длиной MAX PATH (260) можно считать средним значением. под 1.5 кбайта на процесс хватит и с именем 260 байт. можно прибавить 150 кбайт к значению. тогда памяти гарантированно хватит, даже если программа запускает свою копию, а те в свою очередь делают тоже самое (5!=120). но все равно как то некрасиво, лучше было бы поднять статус процесса до реального времени. и все равно как то...
хотя скорее всего процессор будет уделять время сначала вновь начавшемуся процессу
много гуглил и так и сяк, нигде другого решения не предлагается, и даже прибавку никто не прибавляет, в одной статье даже утверждается что дезасемблировали CreateToolhelp32Snapshot и она так же делает. ну фиг знает...
bomzzz
Цитата:
Количество процессов не будет бесконечно увеличиваться. Если уж так хочется, выдели память заранее под большое количество процессов.
Проблема здесь надумана
Цитата:
чтоб программа вообще не запустилась. а так и выделяла больше больше...
Количество процессов не будет бесконечно увеличиваться. Если уж так хочется, выдели память заранее под большое количество процессов.
Проблема здесь надумана
ниче не надумана. где это видано чтоб гадать сколько выделять.
вот у меня к примеру проблема вылезла недавно. написал програмку все прекрасно работает и работала. пока три дня назад не смотрел ХД фильм, который поджирал от 70 до 100% проца и оказалось при критической загрузке треды запущенные позже обгоняют те что запущены раньше и это сказалось на приложении.
Добавлено:
у меня такие тултипики вылазят у иконки в трее, и когда появляются новые сообщения они стирают старые, вот получается, что новые вылазят до того как старые появятся, и старые вообще не исчезают так и висят на столе
вот у меня к примеру проблема вылезла недавно. написал програмку все прекрасно работает и работала. пока три дня назад не смотрел ХД фильм, который поджирал от 70 до 100% проца и оказалось при критической загрузке треды запущенные позже обгоняют те что запущены раньше и это сказалось на приложении.
Добавлено:
у меня такие тултипики вылазят у иконки в трее, и когда появляются новые сообщения они стирают старые, вот получается, что новые вылазят до того как старые появятся, и старые вообще не исчезают так и висят на столе
объявляю структуру
Код: struct machine
{
char name[100];
char color[15];
char serial[20];
char regnum[8];
int doors, year;
unsigned long price;
}
Код: struct machine
{
char name[100];
char color[15];
char serial[20];
char regnum[8];
int doors, year;
unsigned long price;
}
I am not Liar
Код: machine m;
memset(&m,0,sizeof(m));
Код: machine m;
memset(&m,0,sizeof(m));
bomzzz
Цитата:
Термин "синхронизация потоков" ни о чем не говорит?
Цитата:
треды запущенные позже обгоняют те что запущены раньше
Термин "синхронизация потоков" ни о чем не говорит?
I am not Liar
а что, простая инициализация не подходит?
struct machine m = {0,0,0,0,0,0,0};
а что, простая инициализация не подходит?
struct machine m = {0,0,0,0,0,0,0};
kotlomoy
а что тут синхронизировать, они вообще одновременно не должны были работать - между ними разница не менее 10 секунд. просто иконку надо удалять в другом месте
а что тут синхронизировать, они вообще одновременно не должны были работать - между ними разница не менее 10 секунд. просто иконку надо удалять в другом месте
а никто случайно не знает точно чем лимитируется число процессов в системе.
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
Предыдущая тема: не знаю как назвать тему :-)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.