問題があります :( 乱数を与えるプログラムを作りたい :) rand() 関数を使いたくない :) 自分用に作って、それを関数に変えたい ;) 教育目的で :) しかし問題があります:(私のコードを見てください:)
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <windows.h>
#define MIN 0
#define MAX 99999
using namespace std;
typedef struct _RANDOM_INFO{
DWORD random;
DWORD min;
DWORD max;
} RANDOM_INFO, * LPRANDOM_INFO;
void Error(LPSTR lpErrorMessage){
cout << lpErrorMessage << endl;
exit(EXIT_FAILURE);
}
void GetRandom(LPVOID lpParam){
DWORD dwListSize = 10000, min = 0, max = 99999;
LPDWORD lpRandom = (LPDWORD)lpParam;
LPSTR lpFileSelf, lpKernel, lpNtdll;
HMODULE hFileSelf = NULL, hKernel = NULL, hNtdll = NULL;
hFileSelf = (HMODULE) GetModuleHandle(NULL);
hKernel = (HMODULE) GetModuleHandle("kernel.dll");
hNtdll = (HMODULE) GetModuleHandle("ntdll.dll");
lpFileSelf = (LPSTR) hFileSelf;
lpKernel = (LPSTR) hKernel;
lpNtdll = (LPSTR) hNtdll;
while(1){
DWORD i;
for(i = 0; i <= dwListSize; i++){
*lpRandom = (DWORD)lpFileSelf[i];
}
i = 0;
}
return;
}
int main(int argc, char **argv)
{
DWORD random = 0;
DWORD getRandomThreadId = 0;
HANDLE hGetRandomThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)GetRandom, &random, 0, &getRandomThreadId);
if(hGetRandomThread == INVALID_HANDLE_VALUE)
Error("Cannot make a random list.");
getch();
cout << random << endl;
Sleep(1500);
return 0;
}
変数はいつ値を取得して出力する必要がありますが、私は常に0を取得し、Windowsエラーが発生する理由を教えてもらえますか??? GetRandom関数で変数hKernelを使用しようとすると別の問題が発生します:(しかし、hFileSelfとhNtdllで正常に動作します!!!!カーネルは読み取りから保護されています???
注:これは乱数の生成ではありません:)ユーザーがキーボードのEnterをクリックしたときにメモリから数値を取得する方法にすぎません:)、すべてのユーザーで常に同じ時間であるとは限らないため、常にメモリ内の同じポインタ:) 私がやりたいことを理解してくれることを願っています:) 私の悪い英語で申し訳ありません:) 問題を解決するのを手伝ってください:)
ありがとう :)