HKEY key;
DWORD value = 7;
RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\SuperProgram", &key);
RegSetValueEx(key, "DWORD Value Sample", 0, REG_DWORD, (LPBYTE)&value, sizeof(DWORD));
RegCloseKey(key);
Помогите разоьраться с ф-ей
Есть такая функция LookupAccountName... можно-ли с помощью нее узнать кто залогинен на удаленной машине? если нет, то с помощью чего можно это сделать?
Может это то что ты ищешь? ;-)))
p.s. система с одним доменом
была мысля написать такую систему клиент-сервер... например на удаленную тачку ставится софтина (сервер по сути), к нему с админской машины (клиент) поступают запросы на необходимую инфу... а сервер собсно гря возвращает эту самую инфу... но опять же, вопрос как??? я в жизни этим не занимался... это по моему из серии RPC или как?
Насчет твоего клиента-сервера ;-) для начала перечисли что ты узнавать собрался, можно кое-что узнать просто по сети, не ставя всякие софтинки ;-) Перечисли что ты ХОЧЕШЬ узнать.
Не плохо было бы еще:
1) узнать какие приложения запущены
2) как заблокировать машину... причём, что-б разблокировать мог тока админ <- (это сааамое главное)
вроде все...
кстати у тя чё-нть типа аську случаем... моя - 258464925...
NtQuerySystemInformation например, как это делает наш любимый виндовский Диспетчер Задач :-)
Можно проще, я использую EnumProcesses, примерчик во вложении :-)))
Насчет разблокирования-заблокирования можно подробнее? ;-)) как именно? чтоб Окно Входа в Систему высветить, или что покруче, типа своего собственного? может, как в компьютерных клубах - блокировка/разблокировка по сети, так? :о)
Я не спец, тока начинающий, на 4 курс перешел, но помочь МОГУ и буду РАД! :-)))
Ну я в принципе тоже на 4-ом курсе, тока я немного в другом понимаю... администрирование не для меня... стандартное в принципе можно, тока надо, что-б снять блокировку мог ТОЛЬКО админ... я так еще подумал и одна ну просто очень замечательная идея родилась!!! а вот и она: удаленно отключать глобальную учетную запись юзера... кстати на счет NetWkstaUserEnum, самое первое имя в списке она возвращает "PC-HOME$"... так вот это имя моего, компа... это случайно так получилось, то что это первое имя или так задумано??? если не так то надо еще узнать имя удаленного компа... и чисто теоретически если указать в имени сервера имя локальной машины, то ф-я должна подгребсти те же записи, что и при NULL... почему она этого не делает??? у меня ща просто сетки нет под рукой, а надо бы проверить прогу... чё-т я разошолся ;-P
кстати... процессы с удаленной машины надо...
насчет процессов с удаленной машины... все так муторно и сложно, что проще написать сетевого клиента запущенного ТАМ, который присылает нам все ;-) Тем более что для блокировки компа клиента все равно писать надо :о) Кстати есть варианты как машину наглухо залочить? ;) LockWorkStation - вроде может особо не парясь... Но если пользователь знает пасс, тогда дело пропало.:( У меня есть парочка нестандартных вариантов, но это такой изврат, что страшно вслух произносить....
//Only members of the Administrators local group
//can successfully execute NetWkstaUserEnum
//locally and on a remote server.
а у тебя есть соображения по этому поводу?
Предлагаю выход из всей этой дребедени - проги-клиенты собирают инфу(если локально - то NetWkstaUserEnum прокатывает, можно потом полученные данные просто переслать по сети) и блокируют систему если надо. Прога-сервак ими управляет, собирает всю эту инфу. Это будет ГОРАЗДО проще, чем собирать всякую информацию с компов удаленно(мозг аж вскипит, пока разберусь с привелегиями и др.) :-)))
//Only members of the Administrators local group
//can successfully execute NetWkstaUserEnum
//locally and on a remote server.
ну я перевожу это так: "только члены локльной группы Администраторы могут удачно выполнить NetWkstaUserEnum локально или на удаленном сервере". :-))) домены тут врядли имели в виду....
Я про то что само по себе слово "УДАЛЕННОМ", говорит про то что "администраторы локальных групп сервера", то биш domain'овские админы... по моему так... ну это уже я так понял не важно... пришли к тому, что я хотел в самом начале... тута появляется вопрос - как??? я тока поверхностно знаю как пишутся все эти клиенты, серверы... но думаю неплохо было бы написать клиента (то что НЕ на сервере) в виде службы... и неплохо было-бы поговорить в реал-тамйме (тобишь аська, mail agent...)
А насчет клиента- сервера - вот тебе самый простенький примерчик на WinAPI, просто строчку туда-сюда отсылает... Короч, разберешься, там два раза надо запустить, тока галки Client Server поставить самому надо.
Переделывать влом пример было, как скачал - так и отсылаю...
P.S. Службы я писать пробовал, вроде бы они даже работали! (чудеса просто %) ), могу пример скинуть если надо... Если время будет(завтра например) и те оч. надо - могу клиента в виде службы сам забубенить ради интереса... :-)))
я как-раз написал, службу которя работает с LPT портом, а потом переделал ее под драйвер... писал на masm'e... весело-то было... ну это так маленькое лирическое отступление... =) а от службы не откажусь... ;-)
кстати... вообще я пишу на C# (недавно перешел с С++)... так вот исходник не хочет никуда коннектиться... на C# нашел тоже примерчик, примерно такую-же бадягу тока под консолью... и там тоже не хочет коннектится, грит Connection Refused... тобишь моя тачка никого не пускает, уже все (один) брандмауэры повырубал... кучу портов пререпробывал (даже 80-ый не катит!!!) нифига!!! прям ХЗ что млин =(((
два - юзать С++ =) У меня книжка когда-то была по С#, но я так и не начал им заниматься серьезно.... не понравилось что куча dll'ок проги за собой тянут... вникать не стал - забил! =)
Завтра вечерком службу нарисую, время выкроил уже =)
вроде всё норма, та прога была тока клиентом, коннектится некуда было вот и гнала... терь хотя-бы не службу, а так чот-б на экране и таскбаре не светилась... тока в пущай будет трее например... а на счет C# никаких dll'ок проги за собой не тянут (за исключением .NET Framework =) )...
mscoree или что-то типа того :-)))
Насчет системных служб: они тока в диспетчере задач будут палиться, с пометочкой SYSTEM. Никакого интерфейса кроме редких MessageBox не будет :-))) Лень делать.
можно... а вот лучше вариант - трей... щелк - вылетает инфа всякая... настройки всякие под паролем (типа где сервак, порт и т.д.) по моему (не знаю) это будет гораздо проще сделать... воть...
Админская прога на одном компе, в ней список всех машин, небольшой интерфейс. В прогах клиентах не нужно вводить адрес главного компа, они просто СЛУШАЮТ порт. Поэтому интерфейс не нужен. Кстати, я где-то в MSDN прочел что в сервисах нельзя сделать человеческий интерфейс..., а ладно, видно будет :-)))) щас кодить начну.
а ну да... на счет адресса админ. компа чё-т погнал... давай парень, вперед!!! я верю в тебя!!! :-D
Плииз кто нибудь напишите действующий рабочий пример RegSetKeyValue(C++) , сколько раз не пытался компилятор ругается:"Call to undefined function"
Requirements:
Client Requires Windows XP, Windows 2000 Professional, or Windows NT Workstation 3.1 and later.
Server Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 3.1 and later.
Header Declared in Winreg.h; include Windows.h.
Library Link to Advapi32.lib.
DLL Requires Advapi32.dll.
пример честно гря оочень влом ща писать... тем более ты не очень в тему а так если компилятор ругается до добавь: #include <windows.h>
=)
а если линкер (Build) ругается, то: #pragma comment(lib, "advapi32.lib")
но у меня всё прекрасно сработало и без #pragma...
Если все нормаль - то либо поздней ночью либо днем завтра скину саму службу(клиент щас в виде простой exe, не успел переделать)
Проверь вначале локально!
Запусти client.exe, это приложение должно работать на компах-клиентах.
Интерфейса у него нет, и быть не должно.
Далее, запусти admin.exe - там надо ввести адрес - там введен 127.0.0.1 по умолчанию(попробуй так) Нажми "подключить". Дальше все просто и ясно. У тебя есть виртуальная машина, тестани там, у меня щас локалка закрыта.
:-))))
Хе хе.. :-))) какая забавная функция! ЕЕ НЕТ В ПРИРОДЕ! есть RegSetValue.
Код:
Это работает. :о)
[/QUOTE]
приогромное спасибо.
Насчет того что нет в природе ;)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/regsetkeyvalue.asp
Я имел в виду в ХР нету. Оказалось что RegSetKeyValue есть в Vista. под Висту еще не кодил :-))))
короче... пробовал на локальной всё норма... на удаленной - админ не может приконектится... кстати я уже почти всё сам накатал на C# правда... пока правда почуть глючно, но работает... терь остается гл. задача - подгребсти всё и передать =) а на счет службы можно и дописать - мне будет sampl'oм... вдруг еще захочу клиента на NT перенести... а там ведь 2-ой framework не поставишь... =)
Так. теперь насчет службы - я соорудил. Распакуй архивчик, тока потом устанавливай. Сервис надо устанавливать(можно потом и снести).
в папке bin лежит installer.exe, прямо из этой папки с командной строки запусти "installer.exe /install" - сервис установится, client.exe должен лежать в этой же папке(лучше сам положи его в C:\WINDOWS\system32). Проверишь на вкладке Manage->Services and Applications->Services(у меня англ. виндовс ;о)) появится NetClient Service. Служба написана не особо, времени не было рехтовать ее...
Но работает! :-) чтобы установить службу нужны привеллегии админа.
Тип запуска службы стоит manual, но в исходниках installer.exe посмотришь как поменять на автозагрузку службы. Проверь локально вначале... поотрубай всякие брандмауэры и т.д.
еще одна фишка... удаленная перезагрузка... :-))))
Да вроде работает... тока меня интересует еще одна вещь... например... комп. включен, но в логоффе... если админская прога захочет узнать имя компа, то её пошлют куда подальше так же??? ведь еще ничего не запущено или как??? так вот как можно убрать этот "глюк"???
Я проверял в сетке.
Прога заработала на удаленном компе? firewall'ы ее гасят...
Насчет имени пользователя... там было только первое имя(имя машины), начинающиеся с $... вот у меня и высветило $FLINT.
дальше сам пойду надеюсь... =)
Ну ды можно конечно написать волшебную библиотечку чтобы брандмауэр даже не знал об client.exe :-)))) уже даже готовый примерчик есть как firewall обойти... если надо - могу скинуть..
давай мне как почти начинаещему винд.-прогеру пригодится всё...
Лови :-)))) в статье все написано.... жаль что клиента для обхода firewall'a надо оформлять в виде dll.