• Возможно ли установить программу в песочницу?

    @none7
    Песочница всего лишь не позволяет вносить изменения в систему, но программа видит систему полностью, так как она есть. Если хотите установить несколько экземпляров, то деинсталлируйте Вашу программу из системы и создайте две отдельные песочницы.
    Ответ написан
  • Как скомпилировать и дебажить первый драйвер?

    @none7
    Насколько я знаю, штатный Windows debugger не может отлаживать ядро или драйверы локально. Это Softice такое умел и больше никто. Отладка ядра это такая вещь, которая может привести к краху системы. Ведь безобидный на первый взгляд break point устанавливаемый при каждом single step в случае попадания в него не отлаживаемого потока сломает этот ядерный поток. А ядерный отладчик ведь точно так же нуждается в корректной работе этого самого ядра и работа с отладчиком порождает в ядре множество потоков.
    Так, что без второй машины, отлаживать ядро Вы можете только по логам и крашам. Как Вы думаете, почему ядерный программистов так мало?
    Ответ написан
  • Как вызвать CreateThread внутри Form?

    @none7
    Пример
    #include <Windows.h>
    
    DWORD WINAPI ThreadProc(LPVOID param); // строчка необходима, чтобы весь код выше реализации функции её видел
    public ref class Form1 : System::Windows::Forms::Form {
        System::Windows::Forms::Button^ button1;
        System::Windows::Forms::Label^ label1;
    
        void InitializeComponent() {
            this->button1 = gcnew System::Windows::Forms::Button();
            this->label1 = gcnew  System::Windows::Forms::Label();
            this->SuspendLayout();
    
            this->button1->Location = System::Drawing::Point(205, 95);
            this->button1->Name = "button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 0;
            this->button1->Text = "button1";
            this->button1->UseVisualStyleBackColor = true;
    
            this->label1->AutoSize = true;
            this->label1->Location = System::Drawing::Point(218, 153);
            this->label1->Name = "label1";
            this->label1->Size = System::Drawing::Size(44, 16);
            this->label1->TabIndex = 1;
            this->label1->Text = "label1";
    
            this->AutoScaleDimensions = System::Drawing::SizeF(8.0, 16.0);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(485, 292);
            this->Controls->Add(this->label1);
            this->Controls->Add(this->button1);
            this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle;
            this->MaximizeBox = false;
            this->Name = "Form1";
            this->Text = "Form1";
            this->ResumeLayout(false);
            this->PerformLayout();
        }
    public:
        static Form1^ myform;
        Form1() {
            InitializeComponent();
            myform = this;
            button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
        }
        void SetLabel(System::Int32 i) {
            label1->Text = i.ToString();
        }
    private:
        void button1_Click(System::Object^ sender, System::EventArgs^ e) {
            ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, NULL);
        }
    };
    DWORD WINAPI ThreadProc(LPVOID param) {
        for (int i = 1; i <= 5; i++) {
            ::Sleep(1000);
            // Invoke вызывает указанный метод в потоке окна. MS не обещает синхронизацию
            // потоков для gui-кода. Если не использовать данный метод, то в худшем случае приложение
            // упадёт внутри небезопасных библиотек
            // то есть никаких нормальных исключений не будет. Только хардкорный SEH.
            Form1::myform->Invoke(gcnew System::Action<System::Int32>(Form1::myform, &Form1::SetLabel), i);
        }
        return 0;
    }
    int main(array<System::String^>^ args) {
        System::Windows::Forms::Application::EnableVisualStyles();
        System::Windows::Forms::Application::SetCompatibleTextRenderingDefault(false);
        System::Windows::Forms::Application::Run(gcnew Form1());
        return 0;
    }
    Ответ написан
  • C#| winforms | Кнопка с меню | Как создать кнопку такого вида?

    @none7
    Создаешь кастомный Control. Рисуешь в нём это всё через Graphics с учётом разного размера и разного dpi(попутно проклинаешь себя за свою креативность). Переопределяешь метод OnClick и в нём получаешь координаты клика на поверхности контролла this.PointToClient(Cursor.Position). Высчитав в какой части контролла установлен курсор, реализуешь различное поведение для левой и правой части.
    Если нужна ещё и возможность работы через клавиатуру, без мыши, то придётся создавать два контролла и ставить их рядом.
    Ответ написан
  • Как повысить привилегии в системе без sudoers?

    @none7
    Для скрипта никак. Придётся писать обёртку на компилируемом языке, которая вызовет функции setuid и setgid, а затем запустит скрипт. На бинарник обёртки уже можно поставить флаг S как написал Александр Карабанов. Пример обёртки:
    #include <sys/types.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    int main() {
      setuid(0);
      setgid(0);
      system("/path/to/script");
    }

    При этом естественно владельцем файла должен быть пользователь чьи права нужно получить. То есть для данной обёртки нужно выполнить chown root:root /path/to/file. Правда программа с UID==0, может установить себе любой UID. Вот так вот и работают sudo и su.
    Ответ написан
  • Как через wininet делать несколько запросов в одном коннекте?

    @none7
    Вангую. Если сервер не закрыл подключение после выдачи контента, то HINTERNET полученный от HttpOpenRequest может быть использован для повторного вызова HttpOpenRequest. При этом HttpOpenRequest вернёт тот же HINTERNET. Не зря же они всё в один тип запихнули.
    Ответ написан
  • Почему progressBar медленный?

    @none7
    WinForms в принципе штука не быстрая. Попробуйте сократить число установок значения прогрессбара до размера этого контрола в пикселях и не более 10 изменений в секунду.
    Ответ написан
  • Чем записать .ISO образ Windows 7 на Linux после dd?

    @none7
    А зачем Вам после dd форматировать флешку? После него флешка должна быть рабочей по крайней мере для режима legacy. Если хотите в режиме UEFI, то процедура сложнее! Для начала нужно создать при помощи gparted таблицу разделов GPT, создать и отформатировать раздел с fat32, скопировать на тот раздел файлы из ISO образа, отмонтировать и поставить на раздел метку boot. Если ISO-образ рассчитан на работу с GPT(а Win7 должен быть рассчитан), то флешка станет полноценно загрузочной для UEFI.
    Но гораздо проще залезть в BIOS и выбрать Legacy загрузку.
    Ответ написан
  • Как уменьшить потери через GRE туннель?

    @none7
    Протянуть оптоволоконный кабель между двумя серверами. Как ещё можно исправить связь, качество которой от вашего желания не зависит никак. В ip сетях данные могут теряться, это аксиома. Даже сделав VPN в стиле tcp, окажется, что никто не будет долго ждать тех данных, что лежат в буфере роутера.
    Ответ написан
  • Для чего вообще существует ассемблер?

    @none7
    Все алгоритмы openssl реализованы на Ассемблере. Потому, что оптимизирующие компиляторы генерируют не оптимальный код. Речь даже не про SIMD, самые простые инструкции при весьма ограниченном количестве переменных, компиляторы не в с состоянии расставить в идеальном порядке.
    Ответ написан
  • Как переадресовать udp порт?

    @none7
    Также как и в случае TCP. Разница лишь в том, что NAT не может отслеживать разрыв UDP соединений и удаляет их по таймауту, но это уже заботы приложений.
    Ответ написан
  • Почему брандмауэр блокирует system не смотря на правило?

    @none7
    Потому, что ntoskrnl.exe это не System, фаервол будет считать записью для обычной программы, а программы System не существует, только процесс с таким именем. Попробуйте тупо ввести в это поле "System", авось поможет. Если нет, то значит, что это привилегия предопределённых правил.
    Ответ написан
  • Как оптимизировать нагрузку на ЦП при отправке сообщения?

    @none7
    Действительно, почему же оно такое медленное? Может потому, что binary_t производит нечто подобное?
    {"bytes":[116,101,115,116],"subtype":null}.
    То есть происходит преобразование КАЖДОГО байта в десятичное число. Даже с применением несколько ускоренного алгоритма это всё занимает уйму процессорного времени.
    Ответ написан
  • Как составить такой post запрос при помощи file_get_contents на php?

    @none7
    file_get_contents('http://{openHAB_IP}:8080/rest/items/My_Item', false, stream_context_create(array('http' => array(
        'method' => 'POST',
        'header' => 'Content-Type: text/plain\r\nAccept: application/json\r\n',
        'content' => 'OFF'
    ))));
    Ответ написан
  • Как применяют Task.Run когда у целевого метода есть параметры?

    @none7
    static Task ProxyRun<T1,T2> (Action<T1> action, T1 arg1,) {
        return Task.Run(() => action(arg1));
    }
    static Task ProxyRun<T1,T2> (Action<T1,T2> action, T1 arg1, T2 arg2) {
        return Task.Run(() => action(arg1, arg2));
    }
    static Task<TResult> ProxyRun<T1,TResult> (Func<T1,T2,TResult> action, T1 arg1,) {
        return Task<TResult>.Run(() => action(arg1, arg2));
    }
    static Task<TResult> ProxyRun<T1,T2,TResult> (Func<T1,T2,TResult> action, T1 arg1, T2 arg2) {
        return Task<TResult>.Run(() => action(arg1, arg2));
    }
    static Task StartNew<T1,T2> (this TaskFactory taskFactory, Action<T1,T2> action, T1 arg1, T2 arg2) {
         return taskFactory.StartNew(() => action(arg1, arg2));
    }

    И таких обёрток Вы можете наплодить сколько душе угодно, даже если не хватит существующих разновидностей Func и Action всегда можно добавить.
    Ответ написан
  • Как применить на практике битовую операцию NOT?

    @none7
    s[i] = '0'+((~(s[i]-'0'))&1);
    Но NOT тут притянут за уши, все обычно используют XOR.
    *((*long long)s) ^= 0x0101010101010101LL;
    И никакого цикла не надо.
    Ответ написан
  • Как изменить разрядность приложения .net?

    @none7
    Свойства проекта
    Target = "Any CPU"
    Prefer 32-bit = false
    vs2015_proppage_build.png?view=vs-2019

    А вообще хорошим тоном является запуск браузера по умолчанию указывая вместо пути к программе сам URL и установив свойство UseShellExecute=true. Если хочется предоставить выбор браузера, то нужно залезть в HKEY_CLASSES_ROOT и вытащить из него список обработчиков.
    Ответ написан
  • Какая ошибка в коде?

    @none7
    int main() {
        const char* endl = "\r\n";
        WSADATA wsa;
    
        std::string domin;
        int status;
        std::string write_data;
    
        struct addrinfo hints = { 0 }, * res, * p;
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
    
        SetConsoleCP(GetACP());
        SetConsoleOutputCP(GetACP());
    
        if (status = WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
            std::cout << "Error: of WSAStatus: " << gai_strerror(status) << std::endl;
            return status;
        }
    
        std::cout << "Enter domin: " << std::endl;
        std::getline(std::cin, domin);
    
        if (status = getaddrinfo(domin.c_str(), "80", &hints, &res) != 0) {
            std::cout << ("Error: of getaddrinfo", gai_strerror(status));
            return status;
        };
    
        {
            std::ostringstream ws;
    
            ws << "GET / HTTP/1.1" << endl;
            ws << "Host: " << domin << endl;
            ws << "Accept: text/html, text/*" << endl;
            ws << "Connection: close" << endl;
            ws << endl;
    
            write_data = ws.str();
        }
    
        std::cout << write_data;
    
        char ipstr[1024];
        int s = INVALID_SOCKET;
    
        char bufrecv[2048];
    
        for (p = res; p != NULL; p = p->ai_next) {
            const char* ipver;
            void* addr;
            if (p->ai_family == AF_INET) {
                struct sockaddr_in* ipv4 = (struct sockaddr_in*)p->ai_addr;
                addr = &(ipv4->sin_addr);
                ipver = "IPv4: ";
            }
            else {
                struct sockaddr_in6* ipv6 = (struct sockaddr_in6*)p->ai_addr;
                addr = &(ipv6->sin6_addr);
                ipver = "IPv6: ";
            }
    
            inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr));
            std::cout << "addres: " << ipver << ipstr << std::endl;
    
            if (s != INVALID_SOCKET) {
                shutdown(s, SD_BOTH);
                closesocket(s);
            }
    
            if (((s = socket(p->ai_family, p->ai_socktype, p->ai_protocol))) == INVALID_SOCKET) {
                std::cout << "error of socket: " << WSAGetLastError() << std::endl;
                continue;
            }
    
            if ((connect(s, p->ai_addr, p->ai_addrlen)) == SOCKET_ERROR) {
                std::cout << "Error of connect: " << WSAGetLastError() << std::endl;
                continue;
            }
    
            bool success = true;
            int writed = 0;
            for (size_t i = 0, data_len = write_data.length(); i < data_len; i += writed) {
                writed = send(s, write_data.c_str() + i, (int)min(data_len - i, INT_MAX), 0);
                if (writed == SOCKET_ERROR) {
                    std::cout << "Error of send: " << WSAGetLastError() << std::endl;
                    success = false;
                    break;
                }
            }
            if (success) {
                int readed;
    
                while ((readed = recv(s, bufrecv, sizeof(bufrecv), 0)) != SOCKET_ERROR && readed != 0) {
                    std::cout << std::string(bufrecv, readed);
                }
                if (readed == SOCKET_ERROR) {
                    std::cout << " recv " << WSAGetLastError() << std::endl;
                }
                break;
            }
        }
    
        if (s != INVALID_SOCKET)
        {
            shutdown(s, SD_BOTH);
            closesocket(s);
        }
    
        freeaddrinfo(res);
        WSACleanup();
        system("pause");
        return 0;
    }
    Ответ написан