Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KyouFujibayashi
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 12
#1

Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000 - C++

05.06.2016, 14:24. Просмотров 838. Ответов 3

Есть задача
Основное приложение запускает 2 приложения с приостановленными основными потоками. Запускаемые приложения однотипны и содержат единственный поток с логикой: сканирует перебором пространство идентификаторов процессов и пытается "получить доступ" к ним. Попеременно запуская эти два потока на случайное время (равномерно распределено от 5 до 10 мс) 3 раза, основной процесс если обнаруживает, что один из процессов получил доступ более чем к 10-ти процессам - уничтожает его
Есть решение
Основное приложение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <Windows.h>
#include <locale.h>
using namespace std;
 
#define BUF_SIZE 256
#define _CRT_SECURE_NO_WARNINGS
 
 
TCHAR szName[] = TEXT("MyFileMappingObject");
TCHAR szNameSecond[] = TEXT("MyFileMappingObjectSecond");
TCHAR szMsg[] = TEXT("10");
 
void Mythread(PROCESS_INFORMATION myTh)
{
    srand(time(NULL));
    double t = 1000 + rand() % 2000;
    ResumeThread(myTh.hThread);
    Sleep(t);
    SuspendThread(myTh.hThread);
}
 
 
DWORD WINAPI mainThread()
{
 
    // Zadanie peremennyh
    STARTUPINFO si;                     // struktura s informaciej o zapuske processa
    PROCESS_INFORMATION pi[2];          // struktura s informaciej o 2 processah
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    HANDLE hMapFile;                    // mapping file handle
    LPCTSTR pBuf;                       // ukazatel' na nachal'nyj adres
    TCHAR *ProcessName = new TCHAR;
    bool flag = true, flag2 = true;
 
 
    // sozdanie, zapusk i unichtozhenie 2h processov
 
    mbstowcs(ProcessName, "C:\\Users\\Username\\os2\\OsLab2FProc\\Debug\\OsLab2FProc.exe", 250);
    if (!CreateProcess(ProcessName,
        NULL,
        NULL,
        NULL,
        FALSE,
        CREATE_NEW_CONSOLE,
        NULL,
        NULL,
        &si,
        &pi[0])
        )
        printf("CreateProcess failed, error - %d.\n", GetLastError());
    SuspendThread(pi[0].hThread);
 
    mbstowcs(ProcessName, "C:\\Users\\Username\\os2\\OsLab2SProc\\Debug\\OsLab2SProc.exe", 250);
    if (!CreateProcess(ProcessName, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi[1]))
        printf("CreateProcess failed, error - %d.\n", GetLastError());
    SuspendThread(pi[1].hThread);
 
    for (int i = 0; i < 3; i++)         // zaderzhki mezhdu iteracijami u odnogo potoka net, ona voznikaet tol'ko pri zapuske vtorogo
    {
        // pervyj potok
        if (flag == true)
        {
            Mythread(pi[0]);
            hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szName);
            if (hMapFile == NULL)
            {
                printf("Can not open file mapping object (%d).\n", GetLastError());
                _getch();
                return 1;
            }
 
            pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
            if (pBuf == NULL)
            {
                printf("Presentation of the file can not be projected (%d).\n", GetLastError());
                _getch();
                CloseHandle(hMapFile);
                return 1;
            }
 
            if (lstrcmp(pBuf, szMsg) == 0)
            {
                TerminateProcess(pi[0].hProcess, 0);
                UnmapViewOfFile(pBuf);
                CloseHandle(hMapFile);
                flag = false;
            }
        }
 
 
        // vtoroj potok
        if (flag2 == true)
        {
            Mythread(pi[1]);
            hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szNameSecond);
            if (hMapFile == NULL)
            {
                printf("Can not open file mapping object (%d).\n", GetLastError());
                _getch();
                return 1;
            }
 
            pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
            if (pBuf == NULL)
            {
                printf("Presentation of the file can not be projected (%d).\n", GetLastError());
                _getch();
                CloseHandle(hMapFile);
                return 1;
            }
 
            if (lstrcmp(pBuf, szMsg) == 0)
            {
                TerminateProcess(pi[1].hProcess, 0);
                UnmapViewOfFile(pBuf);
                CloseHandle(hMapFile);
                flag2 = false;
            }
        }
    }
 
    if (pi[0].hProcess != NULL) TerminateProcess(pi[0].hProcess, 0);
    if (pi[1].hProcess != NULL) TerminateProcess(pi[1].hProcess, 0);
 
 
    // zakrytie deskriptorov processov i potokov.
 
    CloseHandle(pi[0].hProcess);
    CloseHandle(pi[0].hThread);
    CloseHandle(pi[1].hProcess);
    CloseHandle(pi[1].hThread);
    return 0;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE mT = CreateThread(NULL, 0, LPTHREAD_START_ROUTINE(&mainThread), 0, 0, 0);
    WaitForSingleObject(mT,INFINITE);
    CloseHandle(mT);
    return 0;
}
Дополнительные приложения:
OsLab2FProc
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
#include <locale.h>
#include <tlhelp32.h>
 
#define BUF_SIZE 256
TCHAR szName[] = TEXT("MyFileMappingObject");
TCHAR szMsg[] = TEXT("10");
 
int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE hMapFile, hProcessSnap;
    LPCTSTR pBuf;
    PROCESSENTRY32 pe32;
 
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE) return 1;
 
    pe32.dwSize = sizeof(PROCESSENTRY32);
 
    hMapFile = CreateFileMapping(
        INVALID_HANDLE_VALUE,    // ispol'zovanie fajla podkachki
        NULL,                    // zashhita po umolchaniju
        PAGE_READWRITE,          // dostup k chteniju/zapisi
        0,                       // maks. razmer objekta
        BUF_SIZE,                // razmer bufera
        szName);                 // imja otrazhennogo v pamjati ob#ekta
    if (hMapFile == NULL)
    {
        printf("Can not open file mapping object (%d).\n", GetLastError());
        _getch();
        return 1;
    }
 
    pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
    if (pBuf == NULL)
    {
        printf("Presentation of the file can not be projected (%d).\n", GetLastError());
        _getch();
        CloseHandle(hMapFile);
        return 1;
    }
 
    int i = 0;
 
    while (Process32Next(hProcessSnap, &pe32)) {
        printf("pe32.th32ProcessID= %x\n", pe32.th32ProcessID);
        Sleep(100);
        if (i == 10) CopyMemory((PVOID)pBuf, szMsg, (_tcslen(szMsg) * sizeof(TCHAR)));
        i++;
    }
 
    UnmapViewOfFile(pBuf);
    CloseHandle(hMapFile);
    CloseHandle(hProcessSnap);
    return 0;
}
OsLab2SProc
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
#include <locale.h>
#include <tlhelp32.h>
 
#define BUF_SIZE 256
TCHAR szNameSecond[] = TEXT("MyFileMappingObjectSecond");
TCHAR szMsg[] = TEXT("10");
 
int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE hMapFile, hProcessSnap;
    LPCTSTR pBuf;
    PROCESSENTRY32 pe32;
 
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE) return 1;
 
    pe32.dwSize = sizeof(PROCESSENTRY32);
 
    hMapFile = CreateFileMapping(
        INVALID_HANDLE_VALUE,    // ispol'zovanie fajla podkachki
        NULL,                    // zashhita po umolchaniju
        PAGE_READWRITE,          // dostup k chteniju/zapisi
        0,                       // maks. razmer objekta
        BUF_SIZE,                // razmer bufera 
        szNameSecond);                 // imja otrazhennogo v pamjati objekta
    if (hMapFile == NULL)
    {
        printf("Can not open file mapping object (%d).\n", GetLastError());
        _getch();
        return 1;
    }
 
    pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
    if (pBuf == NULL)
    {
        printf("Presentation of the file can not be projected (%d).\n", GetLastError());
        _getch();
        CloseHandle(hMapFile);
        return 1;
    }
 
    int i = 0;
 
    while (Process32Next(hProcessSnap, &pe32)) {
        printf("pe32.th32ProcessID= %x\n", pe32.th32ProcessID);
        Sleep(100);
        if (i == 10) CopyMemory((PVOID)pBuf, szMsg, (_tcslen(szMsg) * sizeof(TCHAR)));
        i++;
    }
 
    UnmapViewOfFile(pBuf);
    CloseHandle(hMapFile);
    CloseHandle(hProcessSnap);
    return 0;
}
Во время работы выбрасывается ошибка
Exception thrown at 0x77D75BCA (ntdll.dll) in OsLab2.exe: 0xC0000005: Access violation reading location 0x0000792E.
Вот что я смог выяснить:
1). Метод mainThread выполняется без ошибок(я ставил брейкпоинт на в конце этого метода и он успешно срабатывал).
2). Насколько я понимаю, ошибка выбрасывается в методе _tmain во время вызова WaitForSingleObject(mT, INFINITE);
Вложения
Тип файла: 7z os2.7z (8.37 Мб, 2 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2016, 14:24     Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000
Посмотрите здесь:

Ошибка: Unhandled exception at 0x772115de in TimeShift.exe: 0xC0000005: Access violation reading location 0x00041000. - C++
всем привет! При использовании двумерного массива постоянно появляется ошибка :Unhandled exception at 0x772115de in TimeShift.exe:...

Unhandled exception at 0x0F73DF62 | 0xC0000005: Access violation writing location - C++
Многоуважаемые форумчане, необходима небольшая консультация по следующему коду: #include&lt;iostream&gt; #include&lt;fstream&gt; ...

Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read - C++
Значит есть линия (класс Line ) , которая состоит из точек (Class Point). Хочется Одной линии передать значения другой. Я перегрузил...

Access violation reading location - C++
Помогите пожалуйста! Создаю программу, которая ведет учет данных. В бинарный dat-файл записываются объекты класса (Account) -...

Access violation reading location - C++
Уважаемые знатоки, подскажите пожалуйста в чем проблема или хотя бы типовые причины возникновения, данного исключения (см. заголовок). На...

access violation reading location - C++
access violation reading location такая проблема если вести информацию про двух и больше студентов помогите пожалуйста очень срочно надо ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
889 / 628 / 126
Регистрация: 28.07.2012
Сообщений: 1,697
05.06.2016, 14:41     Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000 #2
Цитата Сообщение от KyouFujibayashi Посмотреть сообщение
TCHAR *ProcessName = new TCHAR;
Ты похоже очень жадный на память под строки...
KyouFujibayashi
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 12
08.06.2016, 18:08  [ТС]     Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000 #3
проблема актуальна
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2016, 19:12     Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000
Еще ссылки по теме:

ошибка Access violation reading location 0x00000066 - C++
Ошибка : Unhandled exception at 0x100e14cf (msvcr100d.dll) in 3.4.exe: 0xC0000005: Access violation reading location 0x00000066. ...

Массивы указателей и ошибка Access violation reading location - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class Number { public: int x; int calc(Number* start,...

Помогите с ошибкой Access violation reading location 0x1ed1d9f8. - C++
Не могу разобраться с VS.... У меня был хороший, проверенный проект, в котором все хорошо работало и небыло проблем. Тут я стал добавлять в...

Как можно найти итерацию, на которой происходит "access violation reading location"? - C++
Ситуация такая что имеется функция которая вызывается в цикле около 1 млн. раз, в какой-то из итераций выскакивает исключение &quot;access...

Ошибка "Unhandled exception, Access violation writing location" - C++
Пишу вот так: root-&gt;child1-&gt;parent=root; root-&gt;child2-&gt;parent=root;выходит ошибка Unhandled exception at 0x00073dec in Regul.exe:...

First chance exception at $77ADB09E. Exception class EAccessViolation with message 'Access Violation'. Process - C++
Объясните в каких случаях возникает эта ошибка, из-за чего? Как справиться с этой ошибкой? Только плиз на примере и доступными словами, т....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
08.06.2016, 19:12     Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000 #4
А ничего, что Вы выделяете под ProcessName 1 символ, но при этом указываете в mbstowcs, что доступно по этому адресу 250?
C++
1
2
3
4
5
...
TCHAR *ProcessName = new TCHAR;  //выделили 1 символ TCHAR
...
mbstowcs(ProcessName, "C:\\Users\\Username\\os2\\OsLab2FProc\\Debug\\OsLab2FProc.exe", 250); //а тут указываем, что доступно 250
...
Yandex
Объявления
08.06.2016, 19:12     Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru