「Windows 10を入手する」のアイコンを非表示にする方法

コマンドプロンプトを管理者モードで実行し、

reg add HKLM\Software\Policies\Microsoft\Windows\Gwx /v DisableGwx /t REG_DWORD /d 1 /f

と入力して実行した後で再起動する

BOM追加

% nkf --overwrite --oc=UTF-8-BOM filename 

BOMつける場合は大抵Windows向けなので勝手に改行コードがCRLFになります。改行コードの指定を明示するなら-Lw オプション追加
BOM削除

% nkf --overwrite --oc=UTF-8 filename 

改行コードは維持されるので、CRを削除したい場合には-Lu オプション追加

OpenSSLをWindowsでビルドしてみた

ここ*1見ながら openssl-1.0.2d をビルド。


動作確認のためテストプログラムをごにょにょと書いてみた。




サーバー側

// ssltcps.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <ws2tcpip.h>
#include <openssl/ssl.h>

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")

int _tmain(int argc, _TCHAR* argv[])
{
    int sockfd, newsockfd, clilen, n = 1, portno = 10000;
    char buffer[1024];
    struct sockaddr_in serv_addr, cli_addr;
    WSADATA wsaData;

    WSAStartup(MAKEWORD(2,0), &wsaData);
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        perror("socket");
        exit(1);
    }
    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&n, sizeof(n));
    memset((char *)&serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;  
    serv_addr.sin_port = htons(portno);
    if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        perror("bind");
        exit(1);
    }
    
    listen(sockfd, 5);
    clilen = sizeof(cli_addr);
    if ((newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen)) < 0) {
        perror("accept");
        exit(1);
    }

    // SSLの初期化
    SSL_library_init();
    SSL_CTX *ctx = SSL_CTX_new(TLSv1_server_method());
    SSL *ssl = SSL_new(ctx);
    SSL_set_fd(ssl, newsockfd);

    // SSLの公開鍵と秘密鍵の読みだし
    SSL_use_certificate_file(ssl, "public.key", SSL_FILETYPE_PEM);
    SSL_use_PrivateKey_file(ssl, "private.key", SSL_FILETYPE_PEM);

    // SSL通信の開始
    SSL_accept(ssl);
    
    memset(buffer, 0, sizeof(buffer));
    SSL_read(ssl, buffer, sizeof(buffer));
    printf("%s\n", buffer);

    // SSLの終了
    SSL_shutdown(ssl);
    SSL_free(ssl);
    SSL_CTX_free(ctx);

    closesocket(newsockfd);
    closesocket(sockfd);

    WSACleanup();
  return 0;
}



クライアント側

// ssltcpc.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <ws2tcpip.h>
#include <openssl/ssl.h>

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")

int _tmain(int argc, _TCHAR* argv[])
{
    int sockfd;
    struct sockaddr_in serv_addr;
    struct hostent *server;
    char hostname[] = "localhost"; 
    int portno = 10000;
    char msg[] = "test text";
    WSADATA wsaData;

    WSAStartup(MAKEWORD(2,0), &wsaData);
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
       perror("socket");
       exit(1);
    }

    if ((server = gethostbyname(hostname)) == NULL) {
        perror("gethostbyname");
        exit(1);
    }
    memset((char *)&serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    memcpy((char *)&serv_addr.sin_addr.s_addr, (char *)server->h_addr, server->h_length);
    serv_addr.sin_port = htons(portno);

    if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        perror("connect");
        exit(1);
    }

    // SSLの初期化
    SSL_library_init();
    SSL_CTX *ctx = SSL_CTX_new(TLSv1_client_method());
    SSL *ssl = SSL_new(ctx);

    // SSL通信の開始
    SSL_set_fd(ssl, sockfd);
    SSL_connect(ssl);

    if (SSL_write(ssl, msg, strlen(msg)) < 0) {
        perror("SSL_write");
        exit(1);
    }

    // SSLの終了
    SSL_shutdown(ssl);
    SSL_free(ssl);
    SSL_CTX_free(ctx);

    closesocket(sockfd);

    WSACleanup();
  return 0;
}