일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이 컴퓨터는 도메인의 구성원이 아닙니다.
- Virtual Private Cloud
- View Connection
- 고정 IP주소를 가진 네트워크 어댑터를 검색할 수 없습니다.
- 정수형 데이터타입
- 제한된 이식성
- 수직적 확장
- 운영관리제어의 축소
- 클라우드 자원 관리자
- 가상 프라이빗 클라우드
- 클라우드 보안 취약성
- 자원 풀링
- 클라우드 소비자
- DHCP 설치
- DHCP 설정
- 멀티테넌시
- VMware
- 클라우드 서비스 소유자
- 수평적 확장
- Community Cloud
- 온디맨드식
- 클라우드 제공자
- VMWare vSphere
- IT 자원
- Error 1720
- VMWare View Connection Serve
- 커뮤니티 클라우드
- 도메인 사용자 또는 그룹을 확인할 수 없습니다.
- dhcp
- 온 프레미스
- Today
- Total
한 걸음씩..
IOPM(I/O Permission Bitmap) 구현 본문
1. 공통사항 ( IOCTL 정의 Drv / App 추가 )
#define IOCTL_TEST_PORT_ALLOW_ACCESS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x0800, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_TEST_PORT_ACCESS_DENIED CTL_CODE(FILE_DEVICE_UNKNOWN, 0x0801, METHOD_BUFFERED, FILE_ANY_ACCESS)
2. Driver 에서..
// IOPM 구조 정의
#define IOPM_SIZE 0x2000
typedef UCHAR IOPM[IOPM_SIZE];
IOPM *IOPM_local = 0;
//Undocument API 함수 원형 정의
void Ke386SetIoAccessMap(int, IOPM *);
void Ke386QueryIoAccessMap(int, IOPM *);
void Ke386IoSetAccessProcess(PEPROCESS, int);
NTSTATUS DriverEntry( PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath )
{
//.....중략
pDriverObject->MajorFunction[IRP_MJ_CREATE] = PCIDrv_CreateClose;
pDriverObject->MajorFunction[IRP_MJ_CLOSE] = PCIDrv_CreateClose;
pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = PCIDrv_DeviceIO;
return STATUS_SUCCESS;
}
{
NTSTATUS ntStatus = STATUS_SUCCESS;
PIO_STACK_LOCATION pStack = NULL;
PPCI_DEVICE_EXTENSION pDeviceExtension = NULL;
if( (pDeviceObject == NULL) || (pIrp == NULL) )
return STATUS_UNSUCCESSFUL;
pStack = IoGetCurrentIrpStackLocation( pIrp );
if( pStack == NULL )
{
ntStatus = STATUS_UNSUCCESSFUL;
pIrp->IoStatus.Status = ntStatus;
IoCompleteRequest( pIrp, IO_NO_INCREMENT );
return ntStatus;
}
pDeviceExtension = (PPCI_DEVICE_EXTENSION)pDeviceObject->DeviceExtension;
if( pDeviceExtension == NULL )
{
ntStatus = STATUS_UNSUCCESSFUL;
pIrp->IoStatus.Status = ntStatus;
IoCompleteRequest( pIrp, IO_NO_INCREMENT );
return ntStatus;
}
IoctlCode = pStack->Parameters.DeviceIoControl.IoControlCode;
switch( IoctlCode )
{
case IOCTL_TEST_PORT_ALLOW_ACCESS:
{
Ke386IoSetAccessProcess(PsGetCurrentProcess(), 1);
Ke386SetIoAccessMap(1, IOPM_local);
pIrp->IoStatus.Information = 0;
ntStatus = STATUS_SUCCESS;
break;
}
case IOCTL_HAJE_TEST_PORT_ACCESS_DENIED:
{
Ke386IoSetAccessProcess( PsGetCurrentProcess(), 0 );
pIrp->IoStatus.Information = 0;
ntStatus = STATUS_SUCCESS;
break;
}
default:
{
ntStatus = STATUS_UNSUCCESSFUL;
break;
}
}
pIrp->IoStatus.Status = ntStatus;
IoCompleteRequest( pIrp, IO_NO_INCREMENT );
return ntStatus;
}
3. App에서는 별다른거 없으므로 패쓰..
'프로그래밍' 카테고리의 다른 글
0xC0000005: Access violation 오류 해결 방법 (0) | 2013.07.15 |
---|---|
Beep 사용 (0) | 2013.07.15 |
Toaster enum Error (0) | 2013.07.15 |
Device 인식 기본적인 함수 (0) | 2013.07.15 |
AfxMessageBox 와 While문을 이용하여 특정 함수 에러 시 재시도 함수 (0) | 2013.07.15 |