KR100927442B1 - 가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치방법, 네이티브 api 호출 처리 방법 및 가상응용프로그램 수행 방법 - Google Patents

가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치방법, 네이티브 api 호출 처리 방법 및 가상응용프로그램 수행 방법 Download PDF

Info

Publication number
KR100927442B1
KR100927442B1 KR1020070082485A KR20070082485A KR100927442B1 KR 100927442 B1 KR100927442 B1 KR 100927442B1 KR 1020070082485 A KR1020070082485 A KR 1020070082485A KR 20070082485 A KR20070082485 A KR 20070082485A KR 100927442 B1 KR100927442 B1 KR 100927442B1
Authority
KR
South Korea
Prior art keywords
virtual
variable
path
host
application
Prior art date
Application number
KR1020070082485A
Other languages
English (en)
Other versions
KR20090017942A (ko
Inventor
최종욱
신동하
정성욱
김지연
알리 말릭 무하마드
Original Assignee
주식회사 마크애니
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 마크애니 filed Critical 주식회사 마크애니
Priority to KR1020070082485A priority Critical patent/KR100927442B1/ko
Priority to US12/673,684 priority patent/US8677345B2/en
Priority to PCT/KR2008/004713 priority patent/WO2009022861A2/en
Publication of KR20090017942A publication Critical patent/KR20090017942A/ko
Application granted granted Critical
Publication of KR100927442B1 publication Critical patent/KR100927442B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45537Provision of facilities of other operating environments, e.g. WINE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0667Virtualisation aspects at data level, e.g. file, record or object virtualisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/83Querying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation

Abstract

가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치 방법, 네이티브 API 호출 처리 방법 및 가상 응용프로그램 수행 방법이 개시되어 있다. 가상 응용프로그램 생성 시스템은 가상 응용프로그램 생성 시스템은, 운영체제의 네이티브 API(Application Program Interface)를 가상 환경에 부합되도록 처리하는 모듈을 다수개 구비하고, 특정 네이티브 API가 호출되면 상기 다수개의 상기 모듈 중 상기 호출된 네이티브 API를 처리할 수 있는 모듈을 찾아 동작시키는 가상 환경 라이브러리 블록과; 사용자로부터 가상화할 응용프로그램의 위치 정보 및 상기 응용프로그램을 가상화하여 설치할 설치 장소의 정보를 입력받고, 상기 가상 환경 라이브러리 블록을 메모리에 주입하여 상기 설치 장소에 가상 응용프로그램을 설치하는 가상 응용프로그램 설치 블록; 및 상기 설치 장소에 설치된 상기 가상 응용프로그램을 수행시키는 가상 응용프로그램 수행 블록을 포함한다. 따라서 사용자가 원하는 응용프로그램을 사용자가 지정한 위치, 예컨대 외부 저장 장치에 가상화시켜 설치하고 설치된 가상 응용프로그램을 호스트와는 별개의 가상 환경에서 수행할 수 있다.

Description

가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치 방법, 네이티브 API 호출 처리 방법 및 가상 응용프로그램 수행 방법 {System for Creating Virtual Application, Method for Installing Virtual Application, Method for Calling Native API and Method for Executing Virtual Application}
본 발명은 가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치 방법, 네이티브 API 호출 처리 방법 및 가상 응용프로그램 수행 방법에 관한 것으로, 좀더 상세하게는, 지정된 위치에 선택된 소프트웨어를 가상화시켜 설치하고 이를 효율적으로 수행시킬 수 있는 가상 응용프로그램 생성 기술에 관한 것이다.
최근 들어, 디지털 기술의 발달과 초고속 인터넷 서비스의 대중화로 인하여 컴퓨팅 작업 여건이 양호해지면서, 기존에 수작업을 통하여 수행되던 다양한 작업들이 컴퓨팅 작업으로 대체되고 있다. 예를 들어, 업무적인 측면에서 사용자는 워드나 워크시트 등과 같은 툴을 이용하여 자신이 원하는 문서를 다양한 형태로 편집함으로써 시간 및 업무 효율의 향상을 가져올 수 있다.
통상 호스트 컴퓨터는 제어 프로세서, 메모리, 입출력 인터페이스 장치, 통신 인터페이스 장치 등을 포함하는 하드웨어와, 그 하드웨어를 토대로 시스템을 관리하고 제어하는 운영체제 및 운영체제 하에서 정해진 특정 기능을 수행하는 응용 프로그램 등을 구비한다. 사용자는 이러한 호스트 컴퓨터에서 하드웨어 및 운영체제를 초기화한 뒤 특정 응용 프로그램을 실행시키고, 그 실행된 응용 프로그램으로부터 제공되는 각종 기능들을 이용하여 원하는 작업을 수행할 수 있다.
한편 사용자가 호스트 컴퓨터에서 특정 응용 프로그램을 사용하여 소정의 작업을 수행하다가 중단한 뒤 그 작업 데이터를 가지고 다른 호스트 컴퓨터에서 작업을 계속하려 할 경우, 해당 호스트 컴퓨터에는 상기 작업을 지원할 수 있는 응용 프로그램, 예컨대 상기 특정 응용 프로그램과 동일하거나 동일 기능을 제공하는 응용 프로그램이 설치되어 있어야 한다.
이때 만약 사용자가 새롭게 작업하고자 하는 호스트 컴퓨터에 상기 작업을 지원할 수 있는 응용 프로그램이 존재하지 않는다면, 사용자는 설치 시디나 파일을 입수하여 상기 작업을 지원하기 위해 필요한 파일들을 응용 프로그램 인스톨(Install) 과정을 통하여 호스트 컴퓨터에 설치하여야 한다. 또한 작업 후에는 보안 유지 등을 위해 설치된 파일들을 삭제하여야 하는 경우도 있다.
그런데 이러한 경우, 사용자는 호스트 컴퓨터에 응용 프로그램을 새롭게 설치하고 사용 후 다시 삭제하기 위한 시간의 소모 및 불편함을 감수하여야 하는 문제가 있다. 이러한 문제는 사용자가 작업할 호스트 컴퓨터의 수가 많아질수록 더욱 심화되게 된다. 또한 사용자가 새롭게 작업하고자 하는 호스트 컴퓨터가 공용 컴퓨 터나 타인 소유의 컴퓨터일 경우 디스크 저장 공간의 불필요한 소모가 발생할 수 있으며, 사용자가 응용 프로그램의 수행 후 해당 응용 프로그램을 삭제하더라도 호스트 컴퓨터에 해당 응용 프로그램의 잔재가 남거나 스파이웨어 등이 잔류하는 등의 문제도 존재하게 된다.
따라서 이러한 문제를 개선할 수 있도록 현재 다양한 기술들이 연구되고 있는데, 그 연구의 산물로서 대표적인 것 중의 하나가 바로 가상 응용 프로그램 생성 툴이다. 가상 응용 프로그램 생성 툴은 응용 프로그램을 가상화하여 패키징함으로써, 단일화된 포터블 프로그램(Portable Program)을 생성하는 소프트웨어 툴을 의미한다. 즉 응용 프로그램을 포터블화하는 것이다. 현재 시판되어 있는 가상 응용 프로그램 생성 툴로는 Thinstall, Autolt Macro Script, Auto Batch File 등이 있다.
통상, 이러한 가상 응용 프로그램 생성 툴은 특정한 응용 프로그램을 패키징하기 위하여, 호스트 컴퓨터의 윈도우의 이미지를 스캔하는 프리스캔(Pre-Scan)을 수행하고, 상기 응용 프로그램을 인스톨 소프트웨어를 통하여 호스트 컴퓨터에 설치하고, 설치 후 호스트 컴퓨터의 윈도우의 이미지를 스캔하는 포스트스캔(Post-Scan)을 수행한다. 그 후 가상 응용 프로그램 생성 툴은 상기 프리스캔에 의하여 얻어진 윈도우의 이미지와 상기 포스트스캔에 의하여 얻어진 윈도우의 이미지를 비교하여, 상기 응용 프로그램의 설치에 따라 시스템에서 변화된 내용들을 추출하여 독자적으로 실행될 수 있는 실행 파일, 즉 가상 응용 프로그램을 생성한다.
따라서 사용자는 상기 생성된 실행 파일을 휴대 가능한 외부 저장 장치, 예 컨대 USB(Universal Serial Bus) 저장 장치 등에 복사한 뒤, 그 외부 저장 장치를 다른 호스트 컴퓨터에 연결하여 실행 파일을 실행시킴으로써 원하는 작업을 수행할 수 있다. 이와 같이 가상 응용 프로그램 생성 툴은 응용 프로그램의 포터블화를 가능하게 한다.
그런데, 이러한 이점에도 불구하고 종래의 가상 응용 프로그램 생성 기술은 여러 가지 심각한 문제점을 내포하고 있다.
첫째로, 종래의 가상 응용 프로그램 생성 툴은 프리스캔, 포스트스캔에 의한 이미지 비교 알고리즘을 가지기 때문에, 패키징 시에 정확성이 떨어지고 에러 발생률이 높은 문제가 있다. 또한 이러한 문제는 사용자가 원하는 응용 프로그램과 그 관련 오브젝트만을 가진 완전한 소프트웨어를 생성하지 못하는 원인이 된다.
보통 윈도우와 같은 운영체제에서는 많은 프로세스들, 예컨대 데몬 프로세스들이 응용 프로그램들과 동시에 수행된다. 이러한 윈도우에서 응용 프로그램 인스톨 프로그램을 사용하여 사용자가 가상화시키기 원하는 응용 프로그램을 설치하는 중에는 특정 데몬 프로세스에서 파일의 생성, 수정이 빈번히 발생할 수 있다. 이러한 파일의 생성, 수정은 이미지 비교 시에 영향을 미친다. 왜냐하면 불필요한 파일들이 이미지 파일에 저장될 수 있기 때문이다. 실지로 종래의 가상 응용 프로그램 생성 툴은, 가상 응용 프로그램 생성 시에, 상당히 높은 수준의 에러 발생률을 갖는 것이 사실이다.
둘째로, 종래의 가상 응용 프로그램 생성 툴은 가상 응용 프로그램을 생성하기 위하여 너무 많은 절차를 거쳐야 하며 그 과정도 복잡하다. 예를 들어, 종래에 는 가상 응용 프로그램을 생성하기 위하여 프리스캔과 포스트스캔 과정을 수행하여야 하며, 이미지 비교 시의 에러를 줄이기 위해 사용자가 일일이 불필요한 파일들을 지워야 한다. 따라서 많은 시간이 소요되고 초보자의 경우 실행 자체도 어려운 문제점이 있다.
셋째로, 종래에는 가상화시키기 위한 응용 프로그램과 동일한 응용 프로그램이 호스트 컴퓨터에 이미 설치되어 있을 경우, 가상 응용 프로그램 생성 툴을 통해 가상 응용 프로그램을 설치하면서 호스트 컴퓨터에 설치된 응용 프로그램을 삭제해 버릴 수도 있는 등의 문제가 발생할 수도 있다.
본 발명이 해결하고자 하는 제 1 과제는 사용자가 지정한 위치에 원하는 응용프로그램을 가상화시켜 가상 응용 프로그램을 설치하고, 이를 효과적으로 수행할 수 있는 가상 응용프로그램 생성 시스템을 제공하는데 있다.
또한, 본 발명이 해결하고자 하는 제 2 과제는 사용자가 선택한 위치에 원하는 응용 프로그램을 설치할 수 있는 가상 응용프로그램 설치 방법을 제공하는데 있다.
또한, 본 발명이 해결하고자 하는 제 3 과제는 가상 응용프로그램의 설치 또는 수행 시 호출되는 운영체제, 예컨대 윈도우 네이티브 API를 처리할 수 있는 네이티브 API 호출 처리 방법을 제공하는데 있다.
또한, 본 발명이 해결하고자 하는 제 4 과제는 가상 응용프로그램 설치 절차에 따라 지정된 장소에 설치된 가상 응용프로그램을 수행할 수 있는 가상 응용프로그램 수행 방법을 제공하는데 있다.
상기 본 발명이 해결하고자 하는 제 1 과제를 달성하기 위하여 본 발명은 가상 응용프로그램 생성 시스템을 제공한다. 가상 응용프로그램 생성 시스템은, 운영체제의 네이티브 API(Application Program Interface)를 가상 환경에 부합되도록 처리하는 모듈을 다수개 구비하고, 특정 네이티브 API가 호출되면 상기 다수개의 상기 모듈 중 상기 호출된 네이티브 API를 처리할 수 있는 모듈을 찾아 동작시키는 가상 환경 라이브러리 블록과; 사용자로부터 가상화할 응용프로그램의 위치 정보 및 상기 응용프로그램을 가상화하여 설치할 설치 장소의 정보를 입력받고, 상기 가상 환경 라이브러리 블록을 메모리에 주입하여 상기 설치 장소에 가상 응용프로그램을 설치하는 가상 응용프로그램 설치 블록; 및 상기 설치 장소에 설치된 상기 가상 응용프로그램을 수행시키는 가상 응용프로그램 수행 블록을 포함한다.
상기 가상 응용프로그램 설치 블록은, 상기 응용프로그램의 위치 정보 및 상기 응용프로그램을 가상화하여 설치할 설치 장소의 정보를 입력받아 각각 변수로 저장하고, 상기 저장된 변수를 특정 모듈로 제공하는 가상 설치 준비 모듈; 및 상기 가상 설치 준비 모듈로부터 제공되는 상기 응용프로그램의 위치 정보를 이용하여 응용프로그램 설치 프로세스를 생성하고, 상기 응용프로그램 설치 프로세스에 상기 가상 환경 라이브러리 블록을 주입하여 상기 가상 응용프로그램을 설치하는 가상 환경 라이브러리 주입 모듈을 포함할 수 있다.
상기 가상 설치 준비 모듈은 상기 가상 응용프로그램의 루트 디렉토리를 인수로 받아 변수 "vm_file_root"에 저장하고, 상기 응용프로그램의 셋업 파일의 위치를 변수 "application"에 저장하고, 상기 저장된 변수 "vm_file_root"를 상기 가상 라이브러리 블록으로 전달할 수 있다. 또한 상기 가상 설치 준비 모듈은 상기 입력된 설치 장소의 정보에 따라 상기 설치 장소를 검색하여 가상 응용프로그램의 리스트를 생성할 수도 있다.
또한, 상기 가상 환경 라이브러리 주입 모듈은 인수로 받은 상기 응용프로그 램의 셋업파일의 위치 정보를 이용하여 상기 응용프로그램의 설치 프로세스를 가져와서 상기 응용프로그램 설치 프로세스를 일시 정지 모드로 생성하고, 상기 응용프로그램 설치 프로세스에 상기 가상 환경 라이브러리 블록을 주입하여 가상 응용프로그램 설치 프로세스로 변환한 뒤, 상기 가상 응용프로그램 설치 프로세스를 시작시킬 수 있다.
상기, 운영체제의 네이티브 API는 윈도우 네이티브 API일 수 있다. 이 경우 상기 윈도우 네이티브 API는 다수의 클래스로 분류될 수 있다.
이때 상기 다수의 클래스는 변수 "POBJECT_ATTRIBUTES ObjectAttributes"를 인자로 받고, PHANDLE 타입의 파일 또는 키에 대한 데이터를 리턴하는 윈도우 네이티브 API를 포함하는 제 1 클래스와; HANDLE 타입의 파일 또는 키에 대한 데이터를 인자로 받고, 오브젝트의 이름과 관련된 문자열을 리턴하는 윈도우 네이티브 API를 포함하는 제 2 클래스; 및 오브젝트의 자식 오브젝트를 요구하는 윈도우 네이티브 API를 포함하는 제 3 클래스를 포함할 수 있다.
이와 같이 3개의 클래스로 분류된 윈도우 네이티브 API를 처리하기 위하여 상기 가상 환경 라이브러리 블록은, 상기 제 1 클래스에 속하는 네이티브 윈도우 API 중 파일 관련 API를 가상 환경에 부합되도록 처리하는 제 1 클래스 가상 파일 처리 모듈과; 상기 제 1 클래스에 속하는 네이티브 윈도우 API 중 레지스트리 관련 API를 가상 환경에 부합되도록 처리하는 제 1 클래스 가상 레지스트리 처리 모듈과; 상기 제 2 클래스에 속하는 네이티브 윈도우 API 중 파일 관련 API를 가상 환경에 부합되도록 처리하는 제 2 클래스 가상 파일 처리 모듈과; 상기 제 2 클래스 에 속하는 네이티브 윈도우 API 중 레지스트리 관련 API를 가상 환경에 부합되도록 처리하는 제 2 클래스 가상 레지스트리 처리 모듈과; 상기 제 3 클래스에 속하는 네이티브 윈도우 API 중 파일 관련 API를 가상 환경에 부합되도록 처리하는 제 3 클래스 가상 파일 처리 모듈; 및 상기 제 3 클래스에 속하는 네이티브 윈도우 API 중 레지스트리 관련 API를 가상 환경에 부합되도록 처리하는 제 3 클래스 가상 레지스트리 처리 모듈을 포함할 수 있다.
상기 제 1 클래스 가상 파일 처리 모듈은, 인수로 주어진 파일 경로가 호스트 경로인지 가상 경로인지를 확인하여, 상기 인수로 주어진 파일 경로가 호스트 경로이면 상기 파일 경로를 변수 "host_path"에 저장한 뒤 가상 경로를 생성하여 "virtual_path"에 저장하고, 상기 인수로 주어진 파일 경로가 가상 경로이면 상기 파일 경로를 변수 "virtual_path"에 저장한 뒤 호스트 경로를 생성하여 변수 "host_path"에 저장한다.
다음으로 상기 제 1 클래스 가상 파일 처리 모듈은 상기 변수 "host_path"의 파일이 존재하는지를 확인하여, 존재할 경우 변수 "host_exist"의 값을 "TRUE"로 저장하고, 존재하지 않으면 변수 "host_exist"의 값을 "FALSE"로 저장한다. 또한, 상기 제 1 클래스 가상 파일 처리 모듈은 상기 변수 "virtual_path"의 파일이 존재하는지를 확인하여, 존재할 경우 변수 "virtual_exist"의 값을 "TRUE"로 저장하고, 존재하지 않으면 변수 "virtual_exist"의 값을 "FALSE"로 저장한다.
다음으로, 상기 제 1 클래스 가상 파일 처리 모듈은 인수로 주어진 옵션이 쓰기 동작인지의 여부를 확인하여, 상기 인수로 주어진 옵션이 쓰기 동작이면 변수 "write" 값을 "TRUE"로 저장하고, 쓰기 동작이 아니면 "write"값을 "FALSE"로 저장한다. 또한 상기 인수로 주어진 옵션이 삭제 동작인지의 여부를 확인하여, 상기 인수로 주어진 옵션이 삭제 동작이면 변수 "delete" 값을 "TRUE"로 저장하고, 삭제 동작이 아니면 "delete"값을 "FALSE"로 저장한다.
이어서, 제 1 클래스 가상 파일 처리 모듈은 상기 저장된 변수 "host_exist", "virtual_exist", "write" 및 "delete"의 값에 따라 "virtual_path" 및 "host_path" 중 어느 하나를 인수로 Real_API를 호출한다.
상기 제 1 클래스 가상 레지스트리 처리 모듈은, 인수로 주어진 키 경로가 호스트 경로인지 가상 경로인지를 확인하여, 상기 인수로 주어진 키 경로가 호스트 경로이면 상기 키 경로를 변수 "host_path"에 저장한 뒤 가상 경로를 생성하여 "virtual_path"에 저장하고, 상기 인수로 주어진 키 경로가 가상 경로이면 상기 키 경로를 변수 "virtual_path"에 저장한 뒤 호스트 경로를 생성하여 변수 "host_path"에 저장한다. 이어서 제 1 클래스 레지스트리 처리 모듈은 상기 변수 "host_path"의 키가 존재하는지를 확인하여, 존재할 경우 변수 "host_exist"의 값을 "TRUE"로 저장하고, 존재하지 않으면 변수 "host_exist"의 값을 "FALSE"로 저장한다. 또한 상기 변수 "virtual_path"의 키가 존재하는지를 확인하여, 존재할 경우 변수 "virtual_exist"의 값을 "TRUE"로 저장하고, 존재하지 않으면 변수 "virtual_exist"의 값을 "FALSE"로 저장한다.
다음으로, 제 1 클래스 레지스트리 처리 모듈은 인수로 주어진 옵션이 쓰기 동작인지의 여부를 확인하여, 상기 인수로 주어진 옵션이 쓰기 동작이면 변수 "write" 값을 "TRUE"로 저장하고, 쓰기 동작이 아니면 "write"값을 "FALSE"로 저장한다. 또한, 상기 인수로 주어진 옵션이 삭제 동작인지의 여부를 확인하여, 상기 인수로 주어진 옵션이 삭제 동작이면 변수 "delete" 값을 "TRUE"로 저장하고, 삭제 동작이 아니면 "delete"값을 "FALSE"로 저장한다.
그리고 난 후, 상기 제 1 클래스 레지스트리 처리 모듈은 상기 저장된 변수 "host_exist", "virtual_exist", "write" 및 "delete"의 값에 따라 "virtual_path" 및 "host_path" 중 어느 하나를 인수로 Real_API를 호출한다.
상기 제 2 클래스 가상 파일 처리 모듈은 Real_API를 호출하여 주어진 인수의 파일 정보를 가져와 파일 경로와 관련된 정보를 포함하는지를 확인하고, 상기 파일 경로를 포함하는 요청일 경우 상기 파일 경로가 가상 경로인지를 확인하여 가상 경로일 경우 상기 가상 경로를 호스트 경로로 변환할 수 있다.
같은 개념으로, 상기 제 2 클래스 가상 레지스트리 처리 모듈은 Real_API를 호출하여 주어진 인수의 키 정보를 가져와 키 경로와 관련된 정보를 포함하는지를 확인하고, 상기 키 경로를 포함하는 요청일 경우 상기 키 경로가 가상 경로인지를 확인하여 가상 경로일 경우 상기 가상 경로를 호스트 경로로 변환할 수 있다.
상기 제 3 클래스 가상 파일 처리 모듈은, 인수로 주어진 핸들을 핸들 리스트에서 찾아 상기 핸들의 위치 정보를 변수 "file_handle"에 저장하고, 상기 저장된 변수 "file_handle"이 NULL 값인지를 확인하여 NULL 값이 아닐 경우, 상기 "file_handle"에 저장되어 있는 변수 "host_exist" 및 변수 "virtual_exist"의 값을 확인하고, 상기 확인 결과에 따라 상기 변수 "file_handle"에 저장된 변수 "host_handle" 및 변수 "virtual_handle" 중 적어도 어느 하나를 인수로 하여 Real_API를 호출한다.
한편 상기 저장된 변수 "file_handle"이 NULL 값일 경우 상기 제 3 클래스 가상 파일 처리 모듈은 상기 인수로 주어진 핸들을 파일 경로로 변환한다.
이때 상기 파일 경로가 가상 경로인 경우, 상기 가상 경로를 변수 "virtual_path"에 저장하고, 변수 "virtual_exist"의 값을 "TRUE"로 설정하고, 상기 파일 경로를 호스트 경로로 변환하여 변수 "host_path"에 저장하고, 상기 저장된 변수 "host_path"에 해당하는 디렉토리가 존재하는지를 확인하여 상기 디렉토리가 존재할 경우 변수 "host_exist"를 "TRUE"로 설정한 뒤, 변수 "host_path"를 인수로 핸들을 생성하여 변수 "host_handle"에 저장하고, 상기 디렉토리가 존재하지 않을 경우 상기 변수 "host_exist"를 "FALSE"로 설정하고, 상기 변수 "host_handle"을 "0"으로 한다.
반면 상기 파일 경로가 호스트 경로일 경우, 상기 제 3 클래스 가상 파일 처리 모듈은, 상기 호스트 경로를 변수 "host_path"에 저장하고, 변수 "host_exist"의 값을 "TRUE"로 설정하고, 상기 파일 경로를 가상 경로로 변환하여 변수 "virtual_path"에 저장하고, 상기 저장된 변수 "virtual_path"에 해당하는 디렉토리가 존재하는지를 확인하여 상기 디렉토리가 존재할 경우 변수 "virtual_exist"를 "TRUE"로 설정한 뒤, 변수 "virtual_path"를 인수로 핸들을 생성하여 변수 "virtual_handle"에 저장하고, 상기 디렉토리가 존재하지 않을 경우, 상기 변수 "virtual_exist"를 "FALSE"로 설정하고, 상기 변수 "virtual_handle"을 "0"으로 한 다.
다음으로, 상기 제 3 클래스 가상 파일 처리 모듈은 상기 핸들 리스트에 상기 변수"host_handle", 상기 변수 "virtual_handle", 상기 변수 "host_exist", 상기 변수 "virtual_exist"를 삽입한 후 그 위치를 변수 "file_handle"에 저장하고, 상기 "file_handle"에 저장된 상기 변수 "host_exist" 및 상기 변수 "virtual_exist"의 값을 확인하여, 상기 확인 결과에 따라 상기 변수 "file_handle"에 저장된 변수 "host_handle" 및 변수 "virtual_handle" 중 적어도 어느 하나를 인수로 하여 Real_API를 호출한다.
상기 제 3 클래스 가상 레지스트리 처리 모듈은, 인수로 주어진 핸들을 핸들 리스트에서 찾아 상기 핸들의 위치 정보를 변수 "key_handle"에 저장하고, 상기 저장된 변수 "key_handle"이 NULL 값인지를 확인하여 NULL 값일 경우, 상기 "key_handle"에 저장되어 있는 변수 "host_exist" 및 변수 "virtual_exist"의 값을 확인하여, 상기 확인 결과에 따라 상기 변수 "key_handle"에 저장된 변수 "host_handle" 및 변수 "virtual_handle" 중 적어도 어느 하나를 인수로 하여 Real_API를 호출한다.
한편, 상기 저장된 변수 "key_handle"이 NULL 값일 경우 상기 제 3 클래스 가상 레지스트리 처리 모듈은 상기 인수로 주어진 핸들을 키 경로로 변환한다.
이때 상기 키 경로가 가상 경로인 경우, 상기 가상 경로를 변수 "virtual_path"에 저장하고, 변수 "virtual_exist"의 값을 "TRUE"로 설정하고, 상기 키 경로를 호스트 경로로 변환하여 변수 "host_path"에 저장하고, 상기 저장된 변수 "host_path"에 해당하는 디렉토리가 존재하는지를 확인하여 상기 디렉토리가 존재할 경우 변수 "host_exist"를 "TRUE"로 설정한 뒤, 변수 "host_path"를 인수로 핸들을 생성하여 변수 "host_handle"에 저장하고, 상기 디렉토리가 존재하지 않을 경우 상기 변수 "host_exist"를 "FALSE"로 설정하고, 상기 변수 "host_handle"을 "0"으로 한다.
반면, 상기 키 경로가 호스트 경로일 경우, 상기 제 3 클래스 가상 레지스트리 처리 모듈은 상기 호스트 경로를 변수 "host_path"에 저장하고, 변수 "host_exist"의 값을 "TRUE"로 설정하고, 상기 파일 경로를 가상 경로로 변환하여 변수 "virtual_path"에 저장하고, 상기 저장된 변수 "virtual_path"에 해당하는 디렉토리가 존재하는지를 확인하여 상기 디렉토리가 존재할 경우 변수 "virtual_exist"를 "TRUE"로 설정한 뒤, 변수 "virtual_path"를 인수로 핸들을 생성하여 변수 "virtual_handle"에 저장하고, 상기 디렉토리가 존재하지 않을 경우, 상기 변수 "virtual_exist"를 "FALSE"로 설정하고, 상기 변수 "virtual_handle"을 "0"으로 한다.
다음으로, 상기 제 3 클래스 가상 레지스트리 처리 모듈은 상기 핸들 리스트에 상기 변수"host_handle", 상기 변수 "virtual_handle", 상기 변수 "host_exist", 상기 변수 "virtual_exist"를 삽입한 후 그 위치를 변수 "key_handle"에 저장하고, 상기 "key_handle"에 저장된 상기 변수 "host_exist" 및 상기 변수 "virtual_exist"의 값을 확인하여, 상기 확인 결과에 따라 상기 변수 "key_handle"에 저장된 변수 "host_handle" 및 변수 "virtual_handle" 중 적어도 어느 하나를 인수로 하여 Real_API를 호출한다.
한편, 상기 다수의 클래스는 응용프로그램의 설치 프로세스 시에 사용되는 윈도우 네이티브 API를 포함하는 제 4 클래스; 및 응용프로그램 수행 시에 레지스트리의 저장, 복구 및 삭제에 사용되는 윈도우 네이티브 API를 포함하는 제 5 클래스를 더 포함할 수 있다.
이 경우, 상기 가상 환경 라이브러리 블록은 상기 제 4 클래스에 속하는 네이티브 윈도우 API를 가상 환경에 부합되도록 처리하는 제 4 클래스 가상 환경 라이브러리 주입 모듈; 및 상기 제 5 클래스에 속하는 네이티브 윈도우 API를 가상 환경에 부합되도록 처리하는 제 5 클래스 가상 레지스트리 저장 모듈, 제 5 클래스 가상 레지스트리 복구 모듈 및 제 5 클래스 레지스트리 삭제 모듈을 더 포함할 수도 있다.
한편, 상기 가상 응용프로그램 수행 블록은 수행하고자 하는 가상 응용프로그램의 루트 디렉토리의 정보 및 상기 가상 응용프로그램의 위치 정보를 각각 변수로 저장하고, 상기 저장된 변수를 특정 모듈로 제공하는 가상 수행 준비 모듈; 및 상기 가상 수행 준비 모듈로부터 제공되는 정보를 이용하여 가상 응용프로그램 수행 프로세스를 생성하고, 상기 가상 응용프로그램을 수행하는 가상 응용프로그램 수행 모듈을 포함할 수 있다.
상기 가상 응용프로그램 수행 모듈은 상기 가상 수행 준비 모듈로부터 제공되는 정보를 이용하여, 상기 가상 응용프로그램의 이름과, 실행 명령 및 커맨드 라인 파라미터를 생성하고, 상기 가상 응용프로그램의 수행 프로세스를 시작하기 위 한 플래그를 설정하고, 상기 가상 환경 라이브러리 블록과 함께 상기 생성된 실행 명령 및 커맨드 라인을 사용하여 상기 가상 응용프로그램 수행 프로세스를 생성한다.
또한, 상기 가상 응용프로그램 수행 블록은 윈도우 클래스를 초기화하고, 상기 초기화한 윈도우 클래스를 등록한 뒤 윈도우를 생성하고 상기 생성된 윈도우의 윈도우 핸들을 취득하는 윈도우 생성 모듈과; 태스크바에 상기 가상 응용프로그램 수행 블록의 아이콘을 생성하는 태스크바 아이콘 생성 모듈과; 상기 태스트바 아이콘 생성 모듈에 의하여 생성된 아이콘의 조작에 따른 콜백 메시지를 처리하는 콜백 메시지 처리 모듈; 및 상기 콜백 메시지 처리 모듈의 호출에 따라 상기 팝업 메뉴를 생성하고, 상기 생성된 팝업 메뉴에 상기 설치된 가상 응용프로그램을 선택할 수 있는 가상 응용프로그램 목록을 메뉴로 등록하는 태스크바 팝업 메뉴 생성 모듈을 더 포함할 수 있다.
한편, 상술한 본 발명이 해결하고자 하는 제 2 과제를 달성하기 위하여 본 발명은 가상 응용프로그램 설치 방법을 제공한다. 가상 응용프로그램 설치 방법은 사용자로부터 가상화할 응용프로그램의 위치 정보 및 상기 응용프로그램을 가상화하여 설치할 설치 장소의 정보를 입력받는 단계와; 상기 입력받은 정보를 이용하여 상기 응용프로그램의 설치 프로세스를 생성하고, 가상 환경을 구성할 수 있는 다수의 모듈을 구비하는 가상 환경 라이브러리를 상기 생성된 응용프로그램의 설치 프로세스에 주입하여 가상 응용프로그램 설치 프로세스로 변환하는 단계; 및 상기 가상 응용프로그램 설치 프로세스를 수행하여 상기 설치 장소에 가상 응용프로그램을 설치하는 단계를 포함한다.
상술한 본 발명이 해결하고자 하는 제 3 과제를 달성하기 위하여 본 발명은 네이티브 API 호출 처리 방법을 제공한다. 네이티브 API 호출 처리 방법은, 운영체제의 네이티브 API(Application Program Interface)를 가상 환경에 부합되도록 처리할 수 있는 모듈을 다수개 구비하는 가상 환경 라이브러리를 이용하여 상기 네이티브 API의 호출을 처리하는 방법에 있어서, 가상 응용프로그램이 설치 및 수행 시 특정한 네이티브 API가 호출되면, 상기 다수개의 상기 모듈 중 상기 호출된 네이티브 API를 처리할 수 있는 모듈을 확인하는 단계; 및 상기 단계에서 확인된 모듈을 수행시켜 상기 호출된 네이티브 API의 기능을 상기 가상 환경에 부합되도록 처리하는 단계를 포함한다.
상술한 본 발명이 해결하고자 하는 제 4 과제를 달성하기 위하여 본 발명은 가상 응용프로그램 수행 방법을 제공한다. 가상 응용프로그램 수행 방법은, 가상 응용프로그램의 루트 디렉토리의 정보 및 상기 가상 응용프로그램의 위치 정보를 각각 변수로 저장하는 단계와; 상기 저장된 변수에 포함된 정보를 이용하여 상기 가상 응용프로그램의 수행을 위한 가상 응용프로그램 수행 프로세스를 생성하는 단계; 및 가상 환경을 구성할 수 있는 다수의 모듈을 구비하는 가상 환경 라이브러리를 상기 생성된 가상 응용프로그램 수행 프로세스에 주입하고, 상기 가상 응용프로그램 수행 프로세스를 포함한다.
이상 설명한 바와 같이, 본 발명에 따르면 가상 응용프로그램의 설치를 위하여 가상 환경을 처리할 수 있는 관련 모듈들만을 가상 실행 환경으로 복사하므로 가상 응용 프로그램의 설치 시에 프리스캔이나 포스트 스캔 등과 같은 복잡한 설치 절차를 거치지 않아도 되며, 한 번의 응용프로그램 설치 프로세스의 수행을 통해 가상 응용프로그램을 설치할 수 있다.
또한, 가상 환경 라이브러리 블록의 모듈들이 제공하는 가상 및 호스트 처리 프로세스를 통하여, 호스트 실행 환경에 설치되어 있는 응용프로그램과 동일한 응용프로그램을 가상 환경에 설치하더라도 호스트 실행 환경의 응용프로그램에서 전혀 영향을 주지 않는다. 따라서 프로그램 수행의 안정성이 확보될 수 있다.
이하, 본 발명이 속하는 분야에 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있도록 본 발명의 바람직한 실시예를 첨부된 도면을 참조하여 상세히 설명한다. 이하에 설명할 본 발명의 바람직한 실시예에서는 내용의 명료성을 위하여 특정한 기술 용어를 사용한다. 하지만 본 발명은 그 선택된 특정 용어에 한정되지는 않으며, 각각의 특정 용어가 유사한 목적을 달성하기 위하여 유사한 방식으로 동작하는 모든 기술 동의어를 포함함을 미리 밝혀둔다.
도 1은 본 발명의 바람직한 실시예에 따른 가상 응용프로그램 생성 시스템의 구성을 도시하는 블록도이다.
도 1에 도시된 바와 같이, 본 발명의 바람직한 실시예에 따른 가상 응용프로그램 생성 시스템(100)은 가상 응용프로그램 설치 블록(Virtual Application Installation Block)(10), 가상 환경 라이브러리 블록(Virtual Environment Library Block)(20) 및 가상 응용프로그램 수행 블록(Virtual Application Execution Block)(40)을 구비한다.
가상 응용프로그램 설치 블록(10)은 사용자로부터 가상 응용프로그램의 설치 장소 및 설치할 응용프로그램의 위치 정보를 입력받고, 입력된 설치 장소에 선택된 응용프로그램을 가상화하여 가상 응용프로그램을 설치하는 기능을 수행한다. 이때 설치된 가상 응용프로그램은 가상 응용 프로그램 수행 블록에 의하여 수행될 수 있다. 즉, 가상 응용프로그램 수행 블록(40)은 설치된 가상 응용프로그램을 수행하는 기능을 수행한다. 한편 가상 환경 라이브러리 블록(20)은 가상 응용프로그램의 설치 및 수행을 가능케 하는 다수의 모듈을 구비하고, 가상 응용프로그램의 설치 및 수행 시에 이들을 제공하는 기능을 수행한다.
상기 각각의 블록은 다수의 모듈들로 구성될 수 있다. 여기서 모듈이란 소정의 단위 기능을 수행할 수 있는 유닛으로서, 예컨대 특정한 함수 또는 함수의 집합을 의미할 수 있다. 이하, 각 블록들의 모듈 구성 및 동작을 상세히 설명하기로 한다.
도 2는 도 1에 도시되어 있는 가상 응용프로그램 설치 블록(10)의 모듈 구성을 도시하는 블록도이다.
도 2에 도시된 바와 같이, 가상 응용프로그램 설치 블록(10)은 가상 설치 준 비 모듈(12) 및 가상 환경 라이브러리 주입 모듈(14)을 구비한다.
가상 설치 준비 모듈(12)은 사용자로부터 가상 응용프로그램을 설치할 설치 장소 및 가상화될 응용프로그램의 위치 정보를 입력받고, 그 입력된 정보들을 가상 라이브러리 주입 모듈로 제공한다. 또한 가상 설치 준비 모듈(12)은 상기 설치 장소에 미리 설치되어 있는 가상 응용프로그램의 정보를 검색할 수도 있다.
도 3은 도 2에 도시되어 있는 가상 설치 준비 모듈(12)의 동작 흐름을 도시하는 흐름도이다.
도 3에 도시된 바와 같이, 먼저 가상 설치 준비 모듈(12)은 사용자로부터 가상 응용프로그램을 설치할 설치 장소 정보를 입력받아 저장한다. 이때 상기 설치 장소는 가상 환경이 구현될 장소를 의미할 수 있다. 예를 들어, 가상 설치 준비 모듈(12)은 사용자에게 디렉토리 선택창을 제공하고, 사용자가 상기 디렉토리 선택창을 통하여 원하는 디렉토리(즉, 가상 응용프로그램의 루트 디렉토리)를 설치 위치로 선택하면, 상기 디렉토리의 정보를 인수로 받은 뒤 이를 변수 "vm_file_root"에 저장한다(단계:S1).
상기 설치 장소는 호스트 컴퓨터와 USB 등의 인터페이스로 연결될 수 있는 외부 저장 장치에 존재할 수 있다. 즉 외부 저장 장치에 가상 응용프로그램을 설치하고 그 가상 응용프로그램을 다른 호스트 컴퓨터에 연결하여 해당 응용프로그램을 수행시킬 수 있도록 하는 것이다. 여기에 대해서는 차후에 상세히 설명될 것이다.
이어서 가상 설치 준비 모듈(12)은 사용자로부터 가상화할 응용프로그램의 위치 정보를 입력받아 저장한다. 이때 상기 위치 정보는 호스트 컴퓨터에 저장되어 있는 응용프로그램 셋업(Setup) 파일의 위치 정보 즉, 셋업 파일로 접근할 수 있는 경로 정보를 의미할 수 있다. 예를 들어 가상 설치 준비 모듈(12)은 사용자에게 파일 선택창을 제공하고, 그 파일 선택창을 통하여 사용자가 원하는 응용프로그램의 셋업 파일을 선택하면 해당 셋업 파일의 위치 정보를 변수 "application"에 저장한다(단계:S2).
다음으로 가상 설치 준비 모듈(12)은 기 저장된 설치 장소 정보를 가상 환경 라이브러리 블록(20)으로 전달한다. 예컨대 가상 설치 준비 모듈(12)은 앞서 저장한 상기 변수 "vm_file_root"을 가상 환경 라이브러리 블록(20)으로 전달할 수 있다(단계:S3).
아울러, 가상 설치 준비 모듈(12)은 저장된 설치 장소 정보에 따라 해당 설치 장소를 검색하여 가상 응용프로그램의 리스트를 생성할 수도 있다(단계:S4). 즉 설치 장소에 이미 설치되어 있는 가상 응용프로그램의 리스트를 생성하는 것이다. 이는 해당 설치 장소에 설치를 원하는 가상 응용프로그램과 동일한 가상 응용프로그램이 이미 설치되어 있는지의 여부 등을 파악할 수 있도록 하기 위함이다. 예를 들어, 가상 설치 준비 모듈(12)은 앞서 저장된 변수 "vm_file_root"의 경로를 검색하여 해당 디렉토리에 설치되어 있는 가상 응용프로그램 리스트를 생성할 수 있다.
한편, 도 2에 도시되어 있는 가상 환경 라이브러리 주입 모듈(14)은 사용자에 의해 입력된 응용프로그램의 위치 정보를 이용하여 해당 응용프로그램의 응용프로그램 설치 프로세스를 가져오고 여기에 가상 환경 라이브러리 블록(20)을 주입하여 가상 응용프로그램 설치 프로세스를 수행시킨다.
도 4는 도 2에 도시되어 있는 가상 환경 라이브러리 주입 모듈(14)의 동작 흐름을 도시하는 흐름도이다.
도 4에 도시된 바와 같이, 먼저 가상 환경 라이브러리 주입 모듈(14)은 가상 설치 준비 모듈(12)로부터 가상화할 응용프로그램의 위치 정보를 전달받아 저장한다. 예를 들어, 가상 환경 라이브러리 주입 모듈(14)은 가상 설치 준비 모듈(12)로부터 전달되는 응용프로그램의 위치 정보를 인수 값으로 받아 변수"application"에 저장할 수 있다(단계:S10). 상기 가상화할 응용프로그램의 위치 정보는 앞서도 언급했듯이 해당 응용프로그램의 셋업 파일의 위치 정보를 의미할 수 있다.
이어서, 가상 환경 라이브러리 주입 모듈(14)은 상기 저장된 응용프로그램의 위치 정보를 이용하여 응용프로그램 설치 프로세스를 취득한 뒤, 가상 응용프로그램 설치 프로세스를 수행하기 위한 준비 작업을 수행한다. 예를 들어, 가상 환경 라이브러리 주입 모듈(14)은 상기 저장된 위치 정보를 이용하여 가상화할 응용프로그램의 셋업 파일을 가져와서, 그 셋업 파일 내에 존재하는 응용프로그램 설치 프로세스의 커맨드 라인 명령을 변수 "command"에 저장하고(단계:S11), 가상 환경 라이브러리 블록(20)을 주입하기 위한 기본적인 플래그(Flag)들을 설정한 뒤(단계:S12), 응용프로그램 설치 프로세스를 일시정지 모드로 생성한다(단계:S13).
이러한 준비 작업이 완료되면, 가상 환경 라이브러리 주입 모듈(14)은 생성된 응용프로그램 설치 프로세스에 가상 환경 라이브러리 블록(20)을 주입한다(단계:S14). 예를 들면 가상 환경 라이브러리 주입 모듈(14)은 메모리에 적재되어 있는 응용프로그램 설치 프로세스의 메모리 영역을 수정하여 가상 환경 라이브러리 블록(20)을 삽입할 수 있다. 이와 같은 과정을 통하여 상기 응용프로그램 설치 프로세스는 가상 응용프로그램 설치 프로세스로 변환되게 된다.
이때 가상 환경 라이브러리 블록(20)은 차후에도 설명하겠지만, 함수 또는 함수의 집합으로 구성된 모듈들을 포함하는 다이내믹 링킹 라이브러리를 의미할 수 있다. 예컨대 가상 환경 라이브러리 블록(20)은 "vm.dll"과 같은 DLL 파일로 표현될 수 있다. 이러한 "vm.dll"은 가상 환경 라이브러리 주입 모듈(14)에 의하여 프로세스에 삽입되어, 호스트 컴퓨터의 운영체제, 즉 윈도우의 라이브러리 파일인 "ntdll.dll"에 의해 서비스되는 기능들을 가상 환경에서 동작시킬 수 있다. 따라서 가상 환경 라이브러리 블록(20)이 주입된 상태에서 응용프로그램의 동작 프로세스가 수행되게 되면 가상 응용프로그램의 동작 프로세스가 수행된다.
상기 가상 환경 라이브러리 블록(20)의 주입이 완료되면, 가상 환경 라이브러리 주입 모듈(14)은 (일시 정지 모드의)변환된 가상 응용프로그램 설치 프로세스를 시작시킨다(단계:S15). 그러면 가상 응용프로그램 설치 프로세스에 의하여 사용자가 선택한 설치 장소(예컨대, 외부 저장 장치)에 사용자가 선택한 응용프로그램이 가상 환경에서의 가상 응용프로그램으로 설치되게 된다(단계:S16).
도 5는 도 1에 도시되어 있는 가상 환경 라이브러리 블록(20)의 모듈 구성을 도시하는 블록도이다.
도 5를 참조하면, 가상 환경 라이브러리 블록(20)은 가상 환경을 구성할 수 있는 모듈들로 구성된 다이내믹 랭킹 라이브러리를 포함한다. 따라서 가상 환경 라이브러리 블록(20)은 다이내믹 랭킹 라이브러리 파일인 "vm.dll"로 표현될 수 있 다.
가상 환경 라이브러리 블록(20)(즉, "vm.dll")은 가상 응용프로그램의 설치 또는 수행 시 윈도우의 네이티브(Native) 라이브러리인 "ntdll.dll"의 특정 NTDLL 함수, 즉 윈도우 네이티브 API(Application Program Interface)가 호출되면, 호출된 윈도우 네이티브 API가 가상 환경에서 실행될 수 있도록 가상화 처리 기능을 제공한다.
이러한 가상 환경 라이브러리 블록(20)은 다수의 모듈로 구성된다. 예컨대, 가상 환경 라이브러리 블록(20)은 제 1 클래스 가상 파일 처리 모듈(21), 제 1 클래스 가상 레지스트리 처리 모듈(22), 제 2 클래스 가상 파일 처리 모듈(23), 제 2 클래스 가상 레지스트리 처리 모듈(24), 제 3 클래스 가상 파일 처리 모듈(25), 제 3 클래스 가상 레지스트리 처리 모듈(26), 제 4 클래스 가상 환경 라이브러리 주입 모듈(27), 제 5 클래스 가상 레지스트리 저장 모듈(28), 제 5 클래스 가상 레지스트리 복구 모듈(29), 제 5 클래스 레지스트리 삭제 모듈 등을 포함한다.
상기 각 모듈은 특정한 네이티브 윈도우 API의 호출 시에 해당 네이티브 윈도우 API의 기능이 가상 환경에서 수행될 수 있도록 처리하는 기능을 갖는다. 이때 네이티브 윈도우 API에는 파일 관련 API, 레지스트리 관련 API, 프로세스 관련 API 등이 존재할 수 있다.
이러한 네이티브 윈도우 API들은 소정 기준에 따라 5개의 클래스, 즉 제 1 클래스, 제 2 클래스, 제 3 클래스, 제 4 클래스 및 제 5 클래스로 분류될 수 있다. 각 클래스의 정의 및 클래스에 포함되는 함수들을 살펴보면 다음과 같다.
1. 제 1 클래스 : 제 1 클래스는 윈도우 네이티브 API들 중 변수 "POBJECT_ATTRIBUTES ObjectAttributes"를 인자로 받고, PHANDLE 타입의 파일 또는 키에 대한 데이터, 예컨대 "PHANDLE FileHandle" 또는 "PHANDLE KeyHandle"을 리턴하는 API들을 포함한다. 이러한 제 1 클래스에 속하는 윈도우 네이티브 API로는 "ZwCreateFile", "ZwOpenFile", "ZwDeleteFile", "ZwQueryAttributesFile", "ZwQueryFullAttributesFile", "ZwCreateKey", "ZwOpenKey", "ZwDeleteKey" 등이 있다.
제 1 클래스에 속하는 네이티브 윈도우 API는 제 1 클래스 가상 파일 처리 모듈(21) 또는 제 1 클래스 가상 레지스트리 처리 모듈(22)에 의하여 처리된다. 예컨대 제 1 클래스에 속하는 네이티브 윈도우 API 중 파일 관련 API는 제 1 클래스 가상 파일 처리 모듈(21)에 의하여 처리될 수 있으며, 레지스트리 관련 API는 제 1 클래스 가상 레지스트리 처리 모듈(22)에 의하여 처리될 수 있다.
2. 제 2 클래스 : 제 2 클래스는 윈도우 네이티브 API들 중 HANDLE 타입의 파일 또는 키에 대한 데이터, 예컨대 "HANDLE FileHandle" 또는 "HANDLE KeyHandle"을 인자로 받고, 오브젝트의 이름과 관련된 문자열을 리턴하는 함수들을 포함한다. 이러한 제 2 클래스의 윈도우 네이티브 API들로는 "ZwQueryInformationFile", "ZwSetInformationFile", "ZwQueryKey" 등이 있다.
제 2 클래스에 속하는 네이티브 윈도우 API는 제 2 클래스 가상 파일 처리 모듈(23) 또는 제 2 클래스 가상 레지스트리 처리 모듈(24)에 의하여 처리된다. 예컨대 제 2 클래스에 속하는 네이티브 윈도우 API 중 파일 관련 API의 경우 제 2 클 래스 가상 파일 처리 모듈(23)에 의하여 처리될 수 있으며, 레지스트리 관련 API는 제 2 클래스 가상 레지스트리 처리 모듈(24)에 의하여 처리될 수 있다.
3. 제 3 클래스 : 제 3 클래스는 윈도우 네이티브 API들 중 오브젝트의 자식 오브젝트를 요구하는 함수들을 포함한다. 제 3 클래스의 함수는 함수의 인자로 HANDLE 타입의 파일 또는 키에 대한 데이터, 예컨대 "HANDLE FileHandle" 등을 받으며, "PVOIDFileInformation"을 리턴한다. 이러한 제 3 클래스의 윈도우 네이티브 API들로는 "ZwQueryDirectoryFile", "ZwClose", "ZwEnumerateKey" 등이 있다.
제 3 클래스에 속하는 네이티브 윈도우 API는 제 3 클래스 가상 파일 처리 모듈(25) 또는 제 3 클래스 가상 레지스트리 처리 모듈(26)에 의하여 처리된다. 예컨대 제 3 클래스에 속하는 네이티브 윈도우 API 중 파일 관련 API의 경우 제 3 클래스 가상 파일 처리 모듈(25)에 의하여 처리될 수 있으며, 레지스트리 관련 API는 제 3 클래스 가상 레지스트리 처리 모듈(26)에 의하여 처리될 수 있다.
4. 제 4 클래스 : 제 4 클래스는 응용프로그램의 설치 프로세스 시에 사용되는 윈도우 네이티브 API를 포함한다. 이러한 제 4 클래스의 윈도우 네이티브 API들은 프로세스 관련 API로서 ZwCreateProcess가 있으며, 제 4 클래스 가상 환경 라이브러리 주입 모듈(27)에 의하여 처리될 수 있다.
5. 제 5 클래스 : 제 5 클래스는 응용프로그램 수행 시에 레지스트리의 저장, 복구 및 삭제에 사용되는 윈도우 네이티브 API를 포함한다. 이러한 제 5 클래스의 윈도우 네이티브 API들은 제 5 클래스 가상 레지스트리 저장 모듈(28), 제 5 클래스 가상 레지스트리 복구 모듈(29), 제 5 클래스 레지스트리 삭제 모듈에 의하 여 처리될 수 있다.
윈도우에서 사용되는 윈도우 네이티브 API들의 기능, 인수 값 및 리턴 값 등에 대해서는 당업자에게 널리 공지되어 있는 사항이므로 상세한 설명은 생략하기로 한다.
도 6은 가상 환경 라이브러리 블록(20)의 수행 절차를 설명하기 위한 흐름도이다.
도 6에 도시된 바와 같이, 가상 환경 라이브러리 블록(20)은 가상 응용프로그램에 의하여 특정한 윈도우 네이티브 API(예컨대 NTDLL 함수)가 호출되면 해당 윈도우 네이티브 API을 가상화하여 처리할 수 있는 모듈을 찾아 수행시킨다.
먼저, 가상 응용프로그램에 의하여 특정한 윈도우 네이티브 API가 호출되면 가상 환경 라이브러리 블록(20)은 호출된 윈도우 네이티브 API를 처리할 수 있는 모듈의 이름을 변수 "VM_Module"에 저장하고(단계:S20), 그 "VM_Module"이 어느 모듈인지를 확인한 후(단계:S21), 해당 모듈을 시작한다(단계:S22a or S22b or ... or S22j).
이후 가상 응용프로그램이 호출하는 시스템 호출 이름을 상태를 나타내는 변수 "Sys_Call"에 저장한 후(단계:S23), 변수 "Sys_Call"이 종료를 나타내는 값이면 가상 환경 라이브러리 블록(20)의 수행을 종료한다(단계:S24).
도 7 내지 도 8은 가상 환경 라이브러리 블록(20)의 제 1 클래스 가상 파일 처리 모듈(21)의 동작을 설명하기 위한 흐름도이다.
도 7 내지 도 8에 도시되어 있는 제 1 클래스 가상 파일 처리 모듈(21)의 동 작은 가상 응용프로그램의 설치 또는 수행 시 제 1 클래스의 윈도우 네이티브 API 중 파일 관련 API가 호출될 때 수행된다. 제 1 클래스의 파일 관련 윈도우 네이티브 API로는 "ZwCreateFile", "ZwOpenFile", "ZwDeleteFile", "ZwQueryAttributesFile", "ZwQueryFullAttributesFile" 등이 있다. 제 1 클래스 가상 파일 처리 모듈(21)은 인자와 호출 등을 가상 환경에 맞게 처리한다.
프로시저가 시작되면, 먼저 제 1 클래스 가상 파일 처리 모듈(21)은 인수로 주어진 정보들을 수신한 뒤(단계:S30), 인수로 주어진 파일 경로 정보, 예컨대 변수 "file_path"가 호스트 경로인지 가상 경로인지를 확인한다(단계:S31). 이때 변수 "file_path"는 제 1 클래스에 속한 윈도우 네이티브 API들의 인자로 받는 "POBJECT_ATTRIBUTES ObjectAttributes"에 포함되어 있는 정보 중의 하나이다.
상기 확인 결과, 인수로 주어진 파일 경로가 호스트 경로이면 제 1 클래스 가상 파일 처리 모듈(21)은 해당 경로를 변수 "host_path"에 저장하고(단계:S32), 가상 경로를 생성하여 변수 "virtual_path"에 저장한다(단계:S33). 반면 인수로 주어진 파일 경로가 가상 경로이면 변수 "file_path"를 변수 "virtual_path"에 저장하고(단계:S34), 호스트 경로를 생성하여 변수 "host_path"에 저장한다(단계:S35).
이어서, 제 1 클래스 가상 파일 처리 모듈(21)은 변수 "host_path"의 파일이 존재하는지를 확인하여(단계:S36), 존재할 경우 변수 "host_exist"의 값을 "TRUE"(예컨대 "1")로 저장하고(단계:S37), 존재하지 않으면 변수 "host_exist"의 값을 "FALSE"(예컨대 "0")로 저장한다(단계:S38).
또한 제 1 클래스 가상 파일 처리 모듈(21)은 변수 "virtual_path"의 파일이 존재하는지를 확인하여(단계:S39), 존재할 경우 변수 "virtual_exist"의 값을 "TRUE"를 나타내는 논리값인 "1"로 저장하고(단계:S40), 존재하지 않으면 변수 "virtual_exist"의 값을 "FALSE"를 나타내는 논리값인 "0"으로 저장한다(단계:S41). 본 실시예의 설명에서는 "TURE"를 나타내는 논리값으로 "1"을, "FALSE"를 나타내는 논리값으로 "0"을 사용하고 있으나 실시 환경에 따라서는 "1"과 "0"의 의미를 바꾸어 사용하거나 또는 다른 코드 값을 사용할 수도 있음은 물론이다.
다음으로, 제 1 클래스 가상 파일 처리 모듈(21)은 인수로 주어진 옵션이 쓰기 동작인지의 여부를 확인하고(단계:S42), 인수로 주어진 옵션이 쓰기 동작이면 변수 "write" 값을 "TRUE"를 나타내는 논리값인 "1"로 저장하고(단계:S43), 쓰기 동작이 아니면 "write"값을 "FALSE"를 나타내는 논리값인 "0"으로 저장한다(단계:S44).
또한 제 1 클래스 가상 파일 처리 모듈(21)은 인수로 주어진 옵션이 삭제 동작인지의 여부를 확인하고(단계:S45), 인수로 주어진 옵션이 삭제 동작이면 변수 "delete" 값을 "TRUE"를 나타내는 논리값인 "1"로 저장하고(단계:S46), 삭제 동작이 아니면 "delete"값을 "FALSE"를 나타내는 논리값인 "0"로 저장한다(단계:S47).
이어서, 제 1 클래스 가상 파일 처리 모듈(21)은 변수 "host_exist", "virtual_exist", "write"값을 확인한다(단계:S48).
상기 확인 결과, "host_exist", "virtual_exist", "write"의 값이 "001"(즉, "host_exist"가 0, "virtual_exist"가 0, "write"가 1)일 경우, 제 1 클래스 가상 파일 처리 모듈(21)은 변수 "virtual_path"의 상위 디렉토리가 존재하는지를 확인 하고(단계:S49), 변수 "virtual_path"의 상위 디렉토리가 존재할 경우 상위 디렉토리를 생성한 뒤(단계:S50), 변수 "virtual_path"를 인수로 Real_API를 호출한다(단계:S56). 이때 Real_API란 가상 응용프로그램에 의하여 특정한 기능을 수행하도록 호출된 제 1 클래스의 윈도우 네이티브 API를 의미할 수 있다. 반면 변수 "virtual_path"의 상위 디렉토리가 존재하지 않을 경우, 상위 디렉토리의 생성 없이 바로 "virtual_path"를 인수로 Real_API를 호출한다(단계:S56).
상기 확인 결과, "host_exist", "virtual_exist", "write"의 값이 "100"(즉, "host_exist"가 1, "virtual_exist"가 0, "write"가 0)일 경우, 제 1 클래스 가상 파일 처리 모듈(21)은 변수 "delete"가 "TRUE"인지를 확인하여(단계:S51), "TRUE"일 경우 변수 "virtual_path"의 상위 디렉토리를 생성하고(단계:S52), 변수 "host_path"의 파일을 변수 "virtual_path"의 파일로 복사한 뒤(단계:S53), 변수 "virtual_path"를 인수로 Real_API를 호출한다(단계:S56). 반면, 변수 "delete"가 "FALSE"인 경우 제 1 클래스 가상 파일 처리 모듈(21)은 변수 "host_path"를 인수로 Real_API를 호출한다(단계:S57).
상기 확인 결과, "host_exist", "virtual_exist", "write"의 값이 "101"(즉, "host_exist"가 1, "virtual_exist"가 0, "write"가 1)일 경우, 제 1 클래스 가상 파일 처리 모듈(21)은 변수 "virtual_path"의 상위 디렉토리를 생성하고(단계:S54), 변수 "host_path"의 파일을 변수 "virtual_path"의 파일로 복사한 뒤(e나계:S55), 변수 "virtual_path"를 인수로 Real_API를 호출한다(단계:S56).
한편, 상기 확인 결과 "host_exist", "virtual_exist", "write"의 값이 "000", "010", "011", "110", "111"일 경우, 제 1 클래스 가상 파일 처리 모듈(21)은 바로 변수 "virtual_path"를 인수로 Real_API를 호출한다(단계:S56).
도 9 내지 도 10은 가상 환경 라이브러리 블록(20)의 제 1 클래스 가상 레지스트리 처리 모듈(22)의 동작을 설명하기 위한 흐름도이다.
도 9 내지 도 10에 도시되어 있는 제 1 클래스 가상 레지스트리 처리 모듈(22)의 동작은 가상 응용프로그램의 설치 또는 수행 시 제 1 클래스의 윈도우 네이티브 API 중 레지스트리 관련 API가 호출될 경우 수행된다. 제 1 클래스의 레지스트리 관련 윈도우 네이티브 API로는 "ZwCreateKey", "ZwOpenKey", "ZwDeleteKey" 등이 존재한다. 제 1 클래스 가상 레지스트리 처리 모듈(22)은 인자와 호출 등을 가상 환경에 맞게 처리한다.
프로시저가 시작되면, 먼저 제 1 클래스 가상 레지스트리 처리 모듈(22)은 인수로 주어진 정보들을 수신한 뒤(단계:S60), 인수로 주어진 키 경로 정보, 예컨대 변수 "key_path"가 호스트 경로인지 가상 경로인지를 확인한다(단계:S61). 이때 변수 "key_path"는 제 1 클래스에 속한 윈도우 네이티브 API들의 인자로 받는 "POBJECT_ATTRIBUTES ObjectAttributes"에 포함되어 있는 정보 중의 하나이다.
상기 확인 결과, 인수로 주어진 키 경로가 호스트 경로이면 제 1 클래스 가상 레지스트리 처리 모듈(22)은 해당 경로를 변수 "host_path"에 저장하고(단계:S63), 가상 경로를 생성하여 변수 "virtual_path"에 저장한다(단계:S64). 반면 인수로 주어진 키 경로가 가상 경로이면 변수 "file_path"를 변수 "virtual_path"에 저장하고(단계:S65), 호스트 경로를 생성하여 변수 "host_path"에 저장한다(e나 계:S66).
이어서, 제 1 클래스 가상 레지스트리 처리 모듈(22)은 변수 "host_path"의 키가 존재하는지를 확인하여(단계:S67), 존재할 경우 변수 "host_exist"의 값을 "TRUE"를 나타내는 논리값인 "1"로 저장하고(단계:S68), 존재하지 않으면 변수 "host_exist"의 값을 "FALSE"를 나타내는 논리값인 "0"으로 저장한다(단계:S69).
또한 제 1 클래스 가상 레지스트리 처리 모듈(22)은 변수 "virtual_path"의 키가 존재하는지를 확인하여(단계:S70), 존재할 경우 변수 "virtual_exist"의 값을 "TRUE"를 나타내는 논리값인 "1"로 저장하고(단계:S71), 존재하지 않으면 변수 "virtual_exist"의 값을 "FALSE"를 나타내는 논리값인 "0"으로 저장한다(단계:S72).
다음으로, 제 1 클래스 가상 레지스트리 처리 모듈(22)은 인수로 주어진 옵션이 쓰기 동작인지의 여부를 확인하고(단계:S73), 인수로 주어진 옵션이 쓰기 동작이면 변수 "write" 값을 "TRUE"를 나타내는 논리값인 "1"로 저장하고(단계:S74), 쓰기 동작이 아니면 "write"값을 "FALSE"를 나타내는 논리값인 "0"으로 저장한다(단계:S75).
또한 제 1 클래스 가상 레지스트리 처리 모듈(22)은 인수로 주어진 옵션이 삭제 동작인지의 여부를 확인하고(단계:S76), 인수로 주어진 옵션이 삭제 동작이면 변수 "delete" 값을 "TRUE"를 나타내는 논리값인 "1"로 저장하고(단계:S77), 삭제 동작이 아니면 "delete"값을 "FALSE"를 나타내는 논리값인 "0"로 저장한다(단계:S78).
이어서, 제 1 클래스 가상 레지스트리 처리 모듈(22)은 변수 "host_exist", "virtual_exist", "write"값을 확인한다(단계:S79).
상기 확인 결과, "host_exist", "virtual_exist", "write"의 값이 "001" 일 경우, 제 1 클래스 가상 레지스트리 처리 모듈(22)은 변수 "virtual_path"의 상위 키가 존재하는지를 확인하고(단계:S80), 변수 "virtual_path"의 상위 키가 존재할 경우 상위 키를 생성한 뒤(단계:S81), 변수 "virtual_path"를 인수로 Real_API를 호출한다(단계:S87). 이때 Real_API란 특정한 기능을 수행하기 위해 가상 응용프로그램에 의하여 호출된 제 1 클래스의 윈도우 네이티브 API를 의미할 수 있다. 반면 변수 "virtual_path"의 상위 키가 존재하지 않을 경우, 상위 키의 생성 없이 바로 "virtual_path"를 인수로 Real_API를 호출한다(단계:S87).
상기 확인 결과, "host_exist", "virtual_exist", "write"의 값이 "100" 일 경우, 제 1 클래스 가상 레지스트리 처리 모듈(22)은 변수 "delete"가 "TRUE"인지를 확인하여(단계:S82), "TRUE"일 경우 변수 "virtual_path"의 상위 키를 생성하고(단계:S83), 변수 "host_path"의 키를 변수 "virtual_path"의 키로 복사한 뒤(단계:S84), 변수 "virtual_path"를 인수로 Real_API를 호출한다(단계:S87). 반면, 변수 "delete"가 "FALSE"인 경우 제 1 클래스 가상 레지스트리 처리 모듈(22)은 변수 "host_path"를 인수로 Real_API를 호출한다(단계:S88).
상기 확인 결과, "host_exist", "virtual_exist", "write"의 값이 "101" 일 경우, 제 1 클래스 가상 레지스트리 처리 모듈(22)은 변수 "virtual_path"의 상위 키를 생성하고(단계:S85), 변수 "host_path"의 키를 변수 "virtual_path"의 키로 복사한 뒤(단계:S86), 변수 "virtual_path"를 인수로 Real_API를 호출한다(단계:S87).
한편, 상기 확인 결과 "host_exist", "virtual_exist", "write"의 값이 "000", "010", "011", "110", "111"일 경우, 제 1 클래스 가상 레지스트리 처리 모듈(22)은 바로 변수 "virtual_path"를 인수로 Real_API를 호출한다(단계:S87).
도 11은 가상 환경 라이브러리 블록(20)의 제 2 클래스 가상 파일 처리 모듈(23)의 동작을 설명하기 위한 흐름도이다.
도 11에 도시되어 있는 제 2 클래스 가상 파일 처리 모듈(23)의 동작은 가상 응용프로그램의 설치 또는 수행 시 제 2 클래스의 윈도우 네이티브 API 중 파일 관련 API가 호출될 때 수행된다. 제 2 클래스의 파일 관련 윈도우 네이티브 API로는 "ZwQueryInformationFile", "ZwSetInformationFile" 등이 존재한다. 제 2 클래스 가상 파일 처리 모듈(23)은 호출, 데이터 취득, 데이터의 리턴을 가상 환경에 맞도록 처리한다.
프로시저가 시작되면, 먼저 제 2 클래스 가상 파일 처리 모듈(23)은 Real_API를 호출하여 주어진 인수의 파일 정보를 가져온다(단계:S90). 즉 Real_API의 인수를 받아오는 것이다. 이때 상기 Real_API는 가상 응용프로그램에 의해 특정 기능의 수행을 위하여 호출된 제 2 클래스의 파일 관련 윈도우 네이티브 API를 의미할 수 있다.
이어서 제 2 클래스 가상 파일 처리 모듈(23)은 인수로 주어진 요청이 파일 경로와 관련된 정보를 포함하는 요청인지를 확인하고(단계:S91), 확인 결과 인수로 주어진 요청이 파일 경로를 포함하는 요청이 아닐 경우는 프로세스를 종료한다. 반면 인수로 주어진 요청이 파일 경로를 포함하는 요청일 경우, 제 2 클래스 가상 파일 처리 모듈(23)은 상기 파일 경로가 가상 경로인지를 확인하고(단계:S92), 가상 경로일 경우 해당 가상 경로를 호스트 경로로 변환한다(단계:S93).
도 12는 가상 환경 라이브러리 블록(20)의 제 2 클래스 가상 레지스트리 처리 모듈(24)의 동작을 설명하기 위한 흐름도이다.
도 12에 도시되어 있는 제 2 클래스 가상 레지스트리 처리 모듈(24)의 동작은 가상 응용프로그램의 설치 또는 수행 시 제 2 클래스의 윈도우 네이티브 API 중 레지스트리 관련 API가 호출될 때 수행된다. 제 2 클래스의 레지스트리 관련 윈도우 네이티브 API로는 "ZwQueryKey" 등이 존재한다. 제 2 클래스 가상 레지스트리 처리 모듈(24)은 호출, 데이터 취득, 데이터의 리턴을 가상 환경에 맞도록 처리한다.
프로시저가 시작되면, 먼저 제 2 클래스 가상 레지스트리 처리 모듈(24)은 Real_API를 호출하여 주어진 인수의 키 정보를 가져온다(단계:S100). 이때 상기 Real_API는 가상 응용프로그램에 의해 특정 기능의 수행을 위하여 호출된 제 2 클래스의 레지시트리 관련 윈도우 네이티브 API를 의미할 수 있다.
이어서 제 2 클래스 가상 레지스트리 처리 모듈(24)은 인수로 주어진 요청이 키 경로와 관련된 정보를 포함하는 요청인지를 확인하고(단계:S101), 확인 결과 인수로 주어진 요청이 키 경로를 포함하는 요청이 아닐 경우는 프로세스를 종료한다. 반면 인수로 주어진 요청이 키 경로를 포함하는 요청일 경우, 제 2 클래스 가상 레 지스트리 처리 모듈(24)은 포함된 키 경로가 가상 경로인지를 확인하고(단계:S102) 가상 경로일 경우 해당 가상 경로를 호스트 경로로 변환한다(단계:S103).
도 13 내지 도 14는 가상 환경 라이브러리 블록(20)의 제 3 클래스 가상 파일 처리 모듈(25)의 동작을 설명하기 위한 흐름도이다.
도 13 내지 도 14에 도시되어 있는 제 3 클래스 가상 파일 처리 모듈(25)의 동작은 가상 응용프로그램의 설치 또는 수행 시 제 3 클래스의 윈도우 네이티브 API 중 파일 관련 API가 호출될 때 수행된다. 제 3 클래스의 파일 관련 윈도우 네이티브 API로는 "ZwQueryDirectoryFile", "ZwClose" 등이 존재한다. 제 3 클래스 가상 파일 처리 모듈(25)은 복수의 호출 및 그에 따른 결과를 결합하는 등의 처리를 수행한다.
프로시저가 시작되면, 먼저 제 3 클래스 가상 파일 처리 모듈(25)은 주어진 핸들을 핸들 리스트에서 찾아 그 위치를 "file_handle"에 저장한다(단계:S110). 상기 핸들 리스트는 주어진 인수에 포함되어 있는 정보이다. 그리고 그 "file_handle"이 NULL 값인지를 확인한 뒤(단계:S111), NULL 값이 아니면 "file_handle"에 저장된 변수를 확인하는 과정(단계:S131)으로 천이하고 NULL 값이면 인수로 주어진 핸들을 파일 경로로 변환한다(단계:S112).
다음으로 제 3 클래스 가상 파일 처리 모듈(25)은 변환된 파일 경로가 가상 경로인지를 확인한다(단계:S113).
이때 상기 파일 경로가 가상 경로일 경우, 제 3 클래스 가상 파일 처리 모듈(25)은 상기 가상 경로를 변수 "virtual_path"에 저장하고(단계:S114), 변수 "virtual_exist"의 값을 "TRUE"를 나타내는 논리값인 "1"로 설정한 뒤(단계:S115), 파일 경로를 호스트 경로로 변환하여 "host_path"에 저장한다(단계:S116). 이어서, 저장된 변수 "host_path"에 해당하는 디렉토리가 존재하는지를 확인하고(단계:S117), 디렉토리가 존재할 경우 변수 "host_exist"를 "TRUE"를 나타내는 논리값인 "1"으로 설정하고(단계:S118), "host_path"를 인수로 핸들을 생성하여 변수 "host_handle"에 저장한다(단계:S119). 반면 저장된 변수 "host_path"에 해당하는 디렉토리가 존재하지 않을 경우, 변수 "host_exist"를 "FALSE"를 나타내는 논리값인 "0"으로 설정하고(단계:S120), 변수 "host_handle"을 "0"으로 한다(단계:S121).
한편, 상기 변환된 파일 경로가 호스트 경로일 경우, 제 3 클래스 가상 파일 처리 모듈(25)은 상기 호스트 경로를 변수 "host_path"에 저장하고(단계:S122), 변수 "host_exist"의 값을 "TRUE"를 나타내는 논리값인 "1"로 설정한 뒤(단계:S123), 파일 경로를 가상 경로로 변환하여 "virtual_path"에 저장한다(단계:S124). 이어서, 저장된 변수 "virtual_path"에 해당하는 디렉토리가 존재하는지를 확인하고(단계:S125), 디렉토리가 존재할 경우 변수 "virtual_exist"를 "TRUE"를 나타내는 논리값인 "1"으로 설정하고(단계:S126), "virtual_path"를 인수로 핸들을 생성하여 변수 "virtual_handle"에 저장한다(단계:S127). 반면 저장된 변수 "virtual_path"에 해당하는 디렉토리가 존재하지 않을 경우, 변수 "virtual_exist"를 "FALSE"를 나타내는 논리값인 "0"으로 설정하고(단계:S128), 변수 "virtual_handle"을 "0"으로 한다(단계:S129).
이어서, 제 3 클래스 가상 파일 처리 모듈(25)은 핸들 리스트에 변수 "host_handle", "virtual_handle", "host_exist", "virtual_exist"를 삽입한 후 그 위치를 변수 "file_handle"에 저장한다(단계:S130).
다음으로 제 3 클래스 가상 파일 처리 모듈(25)은 "file_handle"에 저장된 "host_exist" 및 "virtual_exist"의 값을 확인한다(단계:S131).
이때, 확인된 "host_exist" 및 "virtual_exist"의 값이 "10"(즉, "host_exist"는 "1", "virtual_exist"는 "0")일 경우, 제 3 클래스 가상 파일 처리 모듈(25)은 변수 "file_handle"에 저장된 "host_handle"을 인수로 하여 Real_API를 호출한다(단계:S132). 이때 Real_API는 가상 응용프로그램에 의하여 특정 기능을 위하여 호출된 제 3 클래스의 파일 관련 윈도우 네이티브 API를 의미한다.
상기 확인된 "host_exist" 및 "virtual_exist"의 값이 "00" 또는 "01"일 경우, 제 3 클래스 가상 파일 처리 모듈(25)은 변수 "file_handle"에 저장된 "virtual_handle"을 인수로 하여 Real_API를 호출한다(단계:S133). 한편 상기 확인된 "host_exist" 및 "virtual_exist"의 값이 "11"일 경우, Real_API 호출 후(단계:S134), "file_handle"에 저장된 "virtual_handle"의 디렉토리에 더 이상의 파일이 없는지를 확인하고(단계:S135), 없을 경우 변수 "file_handle"에 저장된 "host_handle"을 인수로 하여 Real_API를 호출한다(단계:S136).
도 15 내지 도 16은 가상 환경 라이브러리 블록(20)의 제 3 클래스 가상 레지스트리 처리 모듈(26)의 동작을 설명하기 위한 흐름도이다.
도 15 내지 도 16에 도시되어 있는 제 3 클래스 가상 레지스트리 처리 모듈(26)의 동작은 가상 응용프로그램의 설치 또는 수행 시 제 3 클래스의 윈도우 네 이티브 API 중 레지스트리 관련 API가 호출될 때 수행된다. 제 3 클래스의 레지스트리 관련 윈도우 네이티브 API로는 "ZwEnumerateKey" 등이 존재한다. 제 3 클래스 가상 레지스트리 처리 모듈(26)은 복수의 호출 및 그에 따른 결과를 결합하는 등의 처리를 수행한다.
프로시저가 시작되면, 먼저 제 3 클래스 가상 레지스트리 처리 모듈(26)은 주어진 핸들을 핸들 리스트에서 찾아 그 위치를 "key_handle"에 저장한다(단계:S140). 상기 핸들리스트는 주어진 인수에 포함되어 있다. 그리고 그 "key_handle"이 NULL 값인지를 확인한 뒤(단계:S141), NULL 값이 아니면 "key_handle"에 저장된 변수를 확인하는 과정(단계:S161)으로 천이하고, NULL 값이면 인수로 주어진 핸들을 키 경로로 변환한다(단계:S142).
다음으로 제 3 클래스 가상 레지스트리 처리 모듈(26)은 변환된 키 경로가 가상 경로인지를 확인한다(단계:S143).
이때 상기 키 경로가 가상 경로일 경우, 제 3 클래스 가상 레지스트리 처리 모듈(26)은 상기 가상 경로를 변수 "virtual_path"에 저장하고(단계:S144), 변수 "virtual_exist"의 값을 "TRUE"를 나타내는 논리값인 "1"로 설정한 뒤(단계:S145), 키 경로를 호스트 경로로 변환하여 "host_path"에 저장한다(단계:S146). 이어서, 저장된 변수 "host_path"에 해당하는 디렉토리가 존재하는지를 확인하고(단계:S147), 디렉토리가 존재할 경우 변수 "host_exist"를 "TRUE"를 나타내는 논리값인 "1"으로 설정하고(단계:S148), "host_path"를 인수로 핸들을 생성하여 변수 "host_handle"에 저장한다(단계:S149). 반면 저장된 변수 "host_path"에 해당하는 디렉토리가 존재하지 않을 경우, 변수 "host_exist"를 "FALSE"를 나타내는 논리값인 "0"으로 설정하고(단계:S150), 변수 "host_handle"을 "0"으로 한다(단계:S151).
한편, 상기 변환된 키 경로가 호스트 경로일 경우, 제 3 클래스 가상 레지스트리 처리 모듈(26)은 상기 호스트 경로를 변수 "host_path"에 저장하고(단계:S152), 변수 "host_exist"의 값을 "TRUE"를 나타내는 논리값인 "1"로 설정한 뒤(단계:S153), 키 경로를 가상 경로로 변환하여 "virtual_path"에 저장한다(단계:S154). 이어서, 저장된 변수 "virtual_path"에 해당하는 키가 존재하는지를 확인하고(단계:S155), 해당 키가 존재할 경우 변수 "virtual_exist"를 "TRUE"를 나타내는 논리값인 "1"으로 설정하고(단계:S156), "virtual_path"를 인수로 핸들을 생성하여 변수 "virtual_handle"에 저장한다(단계:S157). 반면 저장된 변수 "virtual_path"에 해당하는 키가 존재하지 않을 경우, 변수 "virtual_exist"를 "FALSE"를 나타내는 논리값인 "0"으로 설정하고(단계:S158), 변수 "virtual_handle"을 "0"으로 한다(단계:S159).
이어서, 제 3 클래스 가상 레지스트리 처리 모듈(26)은 핸들 리스트에 변수"host_handle", "virtual_handle", "host_exist", "virtual_exist"를 삽입한 후 그 위치를 변수 "key_handle"에 저장한다(단계:S160).
다음으로 제 3 클래스 가상 레지스트리 처리 모듈(26)은 "key_handle"에 저장된 "host_exist" 및 "virtual_exist"의 값을 확인한다(단계:S161).
이때, 확인된 "host_exist" 및 "virtual_exist"의 값이 "10"(즉, "host_exist"는 "1", "virtual_exist"는 "0")일 경우, 제 3 클래스 가상 레지스트 리 처리 모듈(26)은 변수 "key_handle"에 저장된 "host_handle"을 인수로 하여 Real_API를 호출한다(단계:S162). 이때 Real_API는 가상 응용프로그램에 의하여 특정 기능을 위하여 호출된 제 3 클래스의 레지스트리 관련 윈도우 네이티브 API를 의미한다.
상기 확인된 "host_exist" 및 "virtual_exist"의 값이 "00" 또는 "01"일 경우, 제 3 클래스 가상 레지스트리 처리 모듈(26)은 변수 "key_handle"에 저장된 "virtual_handle"을 인수로 하여 Real_API를 호출한다(단계:S163). 반면 상기 확인된 "host_exist" 및 "virtual_exist"의 값이 "11"일 경우, Real_API 호출 후(단계:S164), "key_handle"에 저장된 "virtual_handle"의 키에 더 이상의 키가 없는지를 확인하고(단계:S165), 없을 경우 변수 "file_handle" 에 저장된 "host_handle"을 인수로 하여 Real_API를 호출한다(단계:S166).
도 17은 가상 환경 라이브러리 블록(20)의 제 4 클래스 가상 환경 라이브러리 주입 모듈(27)의 동작을 설명하기 위한 흐름도이다.
도 17을 참조하면, 가상 응용프로그램 생성 시스템(100)은 가상 수행 환경을 생성하기 위해 응용프로그램 설치 프로세스를 수정하여 가상 응용프로그램 설치 프로세스로 변환하여야 한다. 응용 프로그램 설치 프로세스가 사용하는 윈도우 네이티브 API는 가상 환경 라이브러리 블록(20), 즉 "vm.dll"에 의해서 리다이렉션 된다. 제 4 클래스 가상 환경 라이브러리 주입 모듈(27)은 상기 리다이렉션을 처리할 수 있는 모듈이다.
프로시저가 시작되면, 먼저 제 4 클래스 가상 환경 라이브러리 주입 모 듈(27)은 인수로 주어진 응용프로그램 위치 정보를 변수 "application"에 저장한다(단계:S170). 상기 응용프로그램 위치 정보는 응용프로그램의 셋업 파일의 위치 정보, 즉 응용프로그램의 셋업 파일을 찾을 수 있는 경로를 의미할 수 있다.
이어서, 제 4 클래스 가상 환경 라이브러리 주입 모듈(27)은 상기 저장된 응용프로그램 위치 정보를 이용하여 응용프로그램의 셋업 파일을 불러와서, 그 셋업 파일 내에 존재하는 응용프로그램 설치 프로세스의 커맨드 라인 명령을 변수 "command"에 저장하고(단계:S171), 가상 환경 라이브러리 블록(20)을 주입하기 위한 기본적인 플래그(Flag)들을 설정한 뒤(단계:S172), 응용프로그램 설치 프로세스를 일시정지 모드로 생성한다(단계:S173).
다음으로, 제 4 클래스 가상 환경 라이브러리 주입 모듈(27)은 생성된 응용프로그램 설치 프로세스에 가상 환경 라이브러리 블록(20)을 주입함으로써(단계:S174), 가상 응용프로그램 설치 프로세스로 변환한 뒤 가상 응용프로그램 설치 프로세스를 시작시킨다(단계:S175).
한편, 설치된 가상 응용프로그램이 수행되면, 가상 응용프로그램은 가상 수행 환경을 새로 시작하기 위해서 가상 레지스트리 파일, 예컨대 "vreg.reg" 파일을 메모리에 올려야 한다. 또한 마지막으로 가상 응용프로그램이 종료되면 가상 수행 환경을 중지시키기 위하여 모든 메모리의 레지스트리 파일을 "vreg.reg"에 저장하여야 한다. 이러한 동작을 위해서 제 5 클래스 가상 레지스트리 저장 모듈(28), 제 5 클래스 가상 레지스트리 복구 모듈(29), 제 5 클래스 가상 레지스트리 삭제 모듈(30)이 사용된다.
도 18은 가상 환경 라이브러리 블록(20)의 제 5 클래스 가상 레지스트리 저장 모듈(28)의 동작을 설명하기 위한 흐름도이다.
도 18에 도시된 바와 같이, 먼저 제 5 클래스 가상 레지스트리 저장 모듈(28)은 특정 키의 키 루트를 열고(단계:S180), 레지스트리를 저장할 파일, 예컨대"vreg.reg"을 오픈한다(단계:S181). 이어서 제 5 클래스 가상 레지스트리 저장 모듈(28)은 키를 파일에 저장할 수 있는 키 저장 권한을 운영체제인 윈도우의 관리자로부터 얻은 뒤(단계:S182), 상기 파일에 상기 키를 저장한다(단계:S183). 이어서 제 5 클래스 가상 레지스트리 저장 모듈(28)은 레지스트리에서 해당 키는 삭제한 뒤(단계:S184), 관리자로부터 얻은 키 저장 권한을 반납한다(단계:S185).
도 19는 가상 환경 라이브러리 블록(20)의 제 5 클래스 가상 레지스트리 복구 모듈(29)의 동작을 설명하기 위한 흐름도이다.
도 19에 도시된 바와 같이, 먼저 제 5 클래스 가상 레지스트리 복구 모듈(29)은 루트 키에 대한 키 경로를 생성한 뒤(단계:S190), 해당 키(키 경로에 해당하는 키)를 열고, 복구할 레지스트리를 저장하고 있는 파일을 연다(단계:S191). 이어서 제 5 클래스 가상 레지스트리 복구 모듈(29)은 키를 복구할 수 있는 키 복구 권한을 윈도우의 관리자로부터 부여받아(단계:S193), 상기 파일로부터 상기 키를 복구한다(단계:S194). 그리고 난 후 관리자로부터 얻은 키 복구 권한을 반납한다(단계:S195).
도 20은 가상 환경 라이브러리 블록(20)의 제 5 클래스 가상 레지스트리 삭제 모듈(30)의 동작을 설명하기 위한 흐름도이다.
도 20에 도시된 바와 같이, 먼저 제 5 클래스 가상 레지스트리 삭제 모듈(30)은 지우고자 하는 키를 연 뒤(단계:S200), 열린 키를 제외하고 가장 하부의 키부터 키를 삭제한다(단계:S201). 하부의 키들이 삭제되면, 제 5 클래스 가상 레지스트리 삭제 모듈(30)은 상기 열린 키를 삭제한다(단계:S202).
도 21은 도 1에 도시되어 있는 가상 응용프로그램 수행 블록(40)의 구성을 도시하는 블록도이다.
도 21을 참조하면, 가상 응용프로그램 수행 블록(40)은 가상 응용프로그램 설치 블록(10)에 의하여 설치된 가상 응용프로그램의 수행시키고, 가상 응용프로그램의 수행 시에 필요한 부가 기능들을 제공한다. 이러한 가상 응용프로그램 수행 블록(40)은 가상 수행 준비 모듈(41), 윈도우 생성 모듈(42), 태스크바(Task-Bar) 아이콘 생성 모듈(43), 콜백(Call-Back) 메시지 치리 모듈(44), 태스트바 팝업 메뉴 생성 모듈(45) 및 가상 응용프로그램 수행 모듈(46)을 포함한다.
앞서 설명했던 가상 응용프로그램 설치 모듈에 의하여 가상 응용프로그램의 설치가 완료된 후, 사용자가 상기 가상 응용프로그램을 수행하기 위하여 가상 응용프로그램 수행 블록(40)을 수행시키면 가상 수행 준비 모듈(41)로부터 동작이 시작된다.
도 22는 가상 응용프로그램 수행 블록(40)의 가상 수행 준비 모듈(41)의 동작을 설명하기 위한 흐름도이다.
도 22에 도시된 바와 같이, 가상 수행 준비 모듈(41)은 수행하고자 하는 가상 응용프로그램의 장소 정보, 예컨대 가상 응용프로그램의 루트 디렉토리의 정보 를 인수로 받아 변수 "vm_file_root"에 저장한다(단계:S210). 이어서 가상 수행 준비 모듈(41)은 수행할 가상 응용프로그램의 위치 정보, 즉 가상 응용프로그램으로 접근할 수 있는 경로를 변수 "application"에 저장한다(단계:S211).
이와 같이 가상 응용프로그램의 수행을 위한 변수 "vm_file_root" 및 변수 "application"의 설정을 수행한 뒤, 가상 수행 준비 모듈(41)은 변수 "vm_file_root"를 가상 환경 라이브러리 블록(20)으로 전달한 후(단계:S212), 수행을 종료한다. 이러한 가상 수행 준비 모듈(41)의 동작이 완료되면, 윈도우 생성 모듈(42)이 동작할 수 있다.
도 23은 가상 응용프로그램 수행 블록(40)의 윈도우 생성 모듈(42)의 동작을 설명하기 위한 흐름도이다.
도 23을 참조하면, 프로시저가 시작되면, 윈도우 생성 모듈(42)은 먼저 윈도우 클래스를 초기화하고(단계:S220), 초기화한 윈도우 클래스를 등록한다(단계:S221). 이어서 윈도우를 생성하고 생성된 윈도우의 윈도우 핸들을 돌려받는다(단계:S222). 이러한 윈도우 생성 절차는 운용체제인 윈도우에서 사용되는 윈도우 생성 API의 절차를 따를 수 있다. 이러한 윈도우 생성 모듈(42)의 동작을 통하여 윈도우 핸들을 얻으면, 태스크바 아이콘 생성 모듈(43)을 통하여 태스크바에 가상 응용프로그램 수행 관련 아이콘을 생성할 수 있다.
도 24는 가상 응용프로그램 수행 블록(40)의 태스크바 아이콘 생성 모듈(43)의 동작을 설명하기 위한 흐름도이다.
도 24에 도시된 바와 같이, 태스크바 아이콘 생성 모듈(43)은 "NOTIFYICONDATA" 타입의 변수를 초기화한다(단계:S230). "NOTIFYICONDATA"는 네이티브 윈도우에서 사용되는 구조체로서 윈도우 핸들 등의 정보를 포함한다. 다음으로, 태스크바 아이콘 생성 모듈(43)은 초기화된 "NOTIFYICONDATA" 타입의 변수를 이용하여 태스크바에 가상 응용프로그램 수행 블록(40)의 아이콘을 생성한다(단계:S231).
이와 같이 생성된 가상 응용프로그램 수행 블록(40)의 아이콘을 사용자가 클릭(예컨대 마우스의 좌측 버튼 클릭)하면 사용자가 요구하는 이벤트를 무엇인지를 판단하기 위하여 콜백 메시지 처리 모듈(44)이 수행될 수 있다.
도 25는 가상 응용프로그램 수행 블록(40)의 콜백 메시지 처리 모듈(44)의 동작을 설명하기 위한 흐름도이다.
도 25를 참조하면, 콜백 메시지 처리 모듈(44)은 인수로 수신된 변수 "iMsg"의 값이 무엇인지를 확인한다(단계:S24). 이때 변수 "iMsg"는 메시지 종류를 식별할 수 있는 정보를 가진 변수로서 사용자의 클릭에 의하여 인수로 수신될 수 있다.
상기 확인 결과, 변수 "iMsg"의 값이 "WM_CLOSE", "WM_QUIT", "WM_DESTROY"일 경우, 콜백 메시지 처리 모듈(44)은 태스크바의 아이콘(즉 가상 응용프로그램 수행 블록의 아이콘)을 삭제하고 가상 응용프로그램 수행 블록(40)의 프로세스를 종료한다(단계:S241). 만약, 변수 "iMsg"의 값이 "TASKBAR_ICON_NOTIFY"일 경우 콜백 메시지 처리 모듈(44)은 태스크바 메뉴 생성 모듈을 호출한다(단계"S242).
반면, 변수 "iMsg"의 값이 "WM_COMMAND"일 경우, 콜백 메시지 처리 모듈(44)은 인자로 넘어온 변수 "wParam"의 값을 확인하고(단계:S243), 변수 "wParam"의 값이 "ID_FILE_OPEN_ROOT"일 경우 가상 실행 환경을 탐색기로 열고(단계:S244), 변수 "wParam"의 값이 "ID_FILE_KILL_PROCESS"일 경우 태스크바의 아이콘을 삭제하고 가상 응용프로그램 수행 블록(40)의 프로세스를 종료한다(단계:S245). 변수 "wParam"의 값이 디펄트(default)값일 경우 가상 응용프로그램 수행 모듈을 메뉴의 번호를 인자로 호출한다(단계:S246).
콜백 메시지 처리 모듈(44)에 의하여 태스크바 메뉴 생성 모듈이 호출되었을 경우, 태스크바 메뉴 생성 모듈은 사용자가 수행하기를 원하는 가상 응용프로그램을 선택할 수 있는 팝업 메뉴를 제공할 수 있다.
도 26은 가상 응용프로그램 수행 블록(40)의 태스크바 팝업 메뉴 생성 모듈(45)의 동작을 설명하기 위한 흐름도이다.
도 26을 참조하면, 태스크바 팝업 메뉴 생성 모듈(45)은 인수로 넘어온 변수 "lParam"이 "WM_LBUTTONDOWN" 인지를 확인한다(단계:S250). 상기 "lParam"는 태스크바 팝업 메뉴 생성 모듈(45)을 호출한 콜백 메시지 처리 모듈(44)로부터 제공될 수 있다. 네이티브 윈도우의 API는 메시지의 종류에 따라서 추가적인 정보를 "wParam" 또는 "lParam"전달한다. 또한 상기 "WM_LBUTTONDOWN"은 사용자가 마우스의 좌측 버튼을 클릭했을 때 발생하는 메시지를 의미할 수 있다.
상기 "lParam"이 "WM_LBUTTONDOWN"일 경우, 태스크바 팝업 메뉴 생성 모듈(45)은 팝업 메뉴를 생성하고(단계:S251), 설치된 가상 응용프로그램의 목록이 저장된 파일에서 가상 응용프로그램의 이름을 읽어 온 뒤(단계:S252), 그 가상 응용프로그램을 선택할 수 있는 메뉴를 상기 팝업 메뉴에 생성한다(단계:S253).
사용자가 상기 생성된 팝업 메뉴에서 수행하고자 하는 가상 응용프로그램을 선택하면 가상 응용프로그램 수행 모듈(46)이 동작한다.
도 27은 가상 응용프로그램 수행 블록(40)의 가상 응용프로그램 수행 모듈(46)의 동작을 설명하기 위한 흐름도이다.
도 27에 도시된 바와 같이, 가상 응용프로그램 수행 모듈(46)은 인수로 주어진 변수 "application_index"와 변수 "vm_file_root"를 사용하여 가상 응용프로그램의 이름과 실행 명령, 커맨드 라인 파라미터 등을 생성한다(단계:S260). 이때 상기 변수 "application_index"와 변수 "vm_file_root"는 가상 수행 준비 모듈(41)에 의하여 제공될 수 있다.
이어서 가상 응용프로그램 수행 모듈(46)은 가상 응용프로그램 수행 프로세스를 시작하기 위한 기본적인 플래그를 설정한 뒤(단계:S261), 가상 환경 라이브러리 블록(20)과 함께 상기 생성된 실행 명령 및 커맨드 라인을 사용하여 일시 정지 모드의 가상 응용프로그램 수행 프로세스를 생성한다(단계:S262). 그 후 가상 응용프로그램 수행 프로세스가 정상적으로 생성되었는지의 여부를 확인하여(단계:S263), 정상적으로 생성되었을 경우 일시정지 모드의 상기 가상 응용프로그램 수행 프로세스를 복구하여 수행시킨다(단계:S264).
이상 본 발명의 바람직한 실시예에 따른 가상 응용프로그램 생성 시스템(100)의 구성요소 및 모듈들이 갖는 기능과 동작들을 살펴보았다. 이러한 가상 응용프로그램 생성 시스템(100)은 가상 응용프로그램 설치 블록(10)을 통하여 사용자가 원하는 설치 장소에 사용자가 선택한 응용프로그램을 가상화하여 설치하고, 설치된 가상 응용프로그램을 수행할 수 있다. 따라서 특정 호스트 컴퓨터에 외부 저장 장치를 연결하여 그 외부 저장 장치에 가상 응용프로그램을 설치한 뒤, 이를 다른 호스트 컴퓨터에 연결하여 가상 응용프로그램을 수행할 수 있다.
도 28은 도 1에 도시되어 있는 가상 응용프로그램 생성 시스템(100)의 전체적인 동작 흐름을 도시하는 흐름도이다.
도 1 내지 도 28에 도시된 바와 같이, 가상 응용프로그램을 설치하기 위하여 먼저 가상 응용프로그램 설치 블록(10)이 수행된다. 가상 응용프로그램 설치 블록(10)은 사용자로부터 가상 응용프로그램을 설치할 설치 장소, 즉 가상 응용프로그램의 루트 디렉토리를 입력받아 변수 "vm_file_root"에 저장한다(단계:S270). 이때 상기 설치 장소는 외부 저장 장치, 예컨대 USB를 통하여 호스트 컴퓨터와 연결되는 외장형 하드나 플래시 메모리 등에 마련된 저장 영역이 될 수 있다.
또한 가상 응용프로그램 설치 블록(10)은 사용자로부터 가상화할 응용프로그램의 셋업파일 위치 정보를 선택하도록 하고, 이를 인수로 받아 변수 "application"에 저장한다(단계:S271).
이후, 가상 응용프로그램 설치 블록(10)은 저장된 변수 "vm_file_root"를 가상 환경 라이브러리 블록(20)으로 전달한다(단계:S272). 또한 가상 응용프로그램 설치 블록(10)은 변수 "vm_file_root"의 경로를 검색하여 해당 장소에 이미 설치되어 있는 가상 응용프로그램의 리스트를 생성할 수도 있다(단계:S273).
다음으로, 가상 응용프로그램 설치 블록(10)은 저장된 변수 "application"을 이용하여 사용자가 선택한 응용프로그램의 설치 프로세스를 취득하고 소정 처리를 수행한 후, 가상 환경 라이브러리 블록(20)을 응용프로그램 설치 프로세스에 주입하여(단계:S274), 응용프로그램 설치 프로세스를 가상 응용프로그램 설치 프로세스로 변환시킨 뒤 가상 응용프로그램 설치 프로세스를 실행시켜 가상 응용프로그램을 설치한다(단계:S275). 이때 설치된 가상 응용프로그램은 가상 환경 라이브러리 블록(20)의 모듈들에 의해 가상 환경으로 처리되어 사용자가 선택한 장소, 예컨대 외부 저장 장치에 설치되게 된다.
가상 응용프로그램이 설치가 완료되면, 사용자는 상기 외부 저장 장치를 다른 호스트 컴퓨터에 연결한 뒤 가상 응용프로그램 수행 블록(40)을 수행시켜 가상 응용프로그램을 사용할 수 있다.
먼저, 가상 응용프로그램 수행 블록(40)은 태스크 바에 상기 설치된 가상 응용프로그램을 수행시킬 수 있는 메뉴 아이콘을 등록한다(단계:S276). 그러면 사용자는 상기 메뉴 아이콘을 선택하여 가상 응용프로그램을 수행시킬 수 있다(단계:S277). 사용자가 메뉴 아이콘을 선택하면, 가상 응용프로그램 수행 블록(40)은 설치된 가상 환경 라이브러리 블록(20)을 가상 응용프로그램에 주입한 후(단계:S278), 가상 응용프로그램을 수행시킨다(단계:S279). 따라서 사용자는 외부 저장 장치 등에 가상 응용프로그램을 설 치하고 이를 호스트 컴퓨터와는 독립적으로 사용할 수 있게 된다.
이상 설명한 본 발명의 바람직한 실시예에 따르면, 가상 응용프로그램의 설치를 위하여 가상화를 처리할 수 있는 관련 모듈들만을 가상 실행 환경으로 복사하므로, 가상 응용 프로그램의 설치 시에 프리스캔이나 포스트 스캔 등과 같은 복잡 한 설치 절차를 거치지 않아도 되며, 한 번의 응용프로그램 설치 프로세스의 수행을 통해 가상 환경의 응용프로그램을 설치할 수 있다. 또한, 가상 환경 라이브러리 블록(20)의 모듈들이 제공하는 가상 및 호스트 처리 프로세스를 통하여, 호스트 실행 환경에 설치되어 있는 응용프로그램과 동일한 응용프로그램을 가상 환경에 설치하더라도 호스트 실행 환경의 응용프로그램에서 전혀 영향을 주지 않는다.
이상 본 발명에 대하여 그 바람직한 실시예를 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허 청구의 범위에 기재된 본 발명의 기술적 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시켜 실시할 수 있음을 이해할 수 있을 것이다.
특히 앞서 설명한 본 발명의 실시예에서는 다양한 명칭을 갖는 변수(예컨대, "vm_file_root", "application" 등)들이 기재되어 있으나, 상기 변수들의 명칭은 실시 환경에 따라 다양한 형태로 변형될 수 있을 것이다. 따라서, 본 발명의 앞으로의 실시예들의 변경은 본 발명의 기술을 벗어날 수 없을 것이다.
도 1은 본 발명의 바람직한 실시예에 따른 가상 응용프로그램 생성 시스템의 구성을 도시하는 블록도이다.
도 2는 도 1에 도시되어 있는 가상 응용프로그램 설치 블록의 모듈 구성을 도시하는 블록도이다.
도 3은 도 2에 도시되어 있는 가상 설치 준비 모듈의 동작 흐름을 도시하는 흐름도이다.
도 4는 도 2에 도시되어 있는 가상 환경 라이브러리 주입 모듈의 동작 흐름을 도시하는 흐름도이다.
도 5는 도 1에 도시되어 있는 가상 환경 라이브러리 블록의 모듈 구성을 도시하는 블록도이다.
도 6은 가상 환경 라이브러리 블록의 수행 절차를 설명하기 위한 흐름도이다.
도 7 내지 도 8은 가상 환경 라이브러리 블록의 제 1 클래스 가상 파일 처리 모듈의 동작을 설명하기 위한 흐름도이다.
도 9 내지 도 10은 가상 환경 라이브러리 블록의 제 1 클래스 가상 레지스트리 처리 모듈의 동작을 설명하기 위한 흐름도이다.
도 11은 가상 환경 라이브러리 블록의 제 2 클래스 가상 파일 처리 모듈(23)의 동작을 설명하기 위한 흐름도이다.
도 12는 가상 환경 라이브러리 블록의 제 2 클래스 가상 레지스트리 처리 모 듈의 동작을 설명하기 위한 흐름도이다.
도 13 내지 도 14는 가상 환경 라이브러리 블록의 제 3 클래스 가상 파일 처리 모듈의 동작을 설명하기 위한 흐름도이다.
도 15 내지 도 16은 가상 환경 라이브러리 블록의 제 3 클래스 가상 레지스트리 처리 모듈의 동작을 설명하기 위한 흐름도이다.
도 17은 가상 환경 라이브러리 블록의 제 4 클래스 가상 환경 라이브러리 주입 모듈의 동작을 설명하기 위한 흐름도이다.
도 18은 가상 환경 라이브러리 블록의 제 5 클래스 가상 레지스트리 저장 모듈의 동작을 설명하기 위한 흐름도이다.
도 19는 가상 환경 라이브러리 블록의 제 5 클래스 가상 레지스트리 복구 모듈의 동작을 설명하기 위한 흐름도이다.
도 20은 가상 환경 라이브러리 블록의 제 5 클래스 가상 레지스트리 삭제 모듈의 동작을 설명하기 위한 흐름도이다.
도 21은 도 1에 도시되어 있는 가상 응용프로그램 수행 블록의 구성을 도시하는 블록도이다.
도 22는 가상 응용프로그램 수행 블록의 가상 수행 준비 모듈의 동작을 설명하기 위한 흐름도이다.
도 23은 가상 응용프로그램 수행 블록의 윈도우 생성 모듈의 동작을 설명하기 위한 흐름도이다.
도 24는 가상 응용프로그램 수행 블록의 태스크바 아이콘 생성 모듈의 동작 을 설명하기 위한 흐름도이다.
도 25는 가상 응용프로그램 수행 블록의 콜백 메시지 처리 모듈의 동작을 설명하기 위한 흐름도이다.
도 26은 가상 응용프로그램 수행 블록의 태스크바 팝업 메뉴 생성 모듈의 동작을 설명하기 위한 흐름도이다.
도 27은 가상 응용프로그램 수행 블록의 가상 응용프로그램 수행 모듈의 동작을 설명하기 위한 흐름도이다.
도 28은 도 1에 도시되어 있는 가상 응용프로그램 생성 시스템의 전체적인 동작 흐름을 도시하는 흐름도이다.

Claims (25)

  1. 윈도우 네이티브 API(Application Program Interface)를 가상화하여 처리할 수 있는 모듈을 다수 개 구비하고, 특정 윈도우 네이티브 API가 호출되면 상기 다수개의 상기 모듈 중 상기 호출된 윈도우 네이티브 API를 가상화하여 처리할 수 있는 모듈을 찾아 동작시키는 가상 환경 라이브러리 블록;
    사용자로부터 가상화할 응용프로그램의 셋업 파일의 위치 정보 및 상기 응용프로그램을 가상화하여 설치할 설치 장소의 정보를 입력받아 각각 변수로 저장하고, 상기 저장된 변수 및 상기 가상 환경 라이브러리 블록을 사용하여 상기 설치 장소에 상기 응용프로그램을 가상화한 가상 응용프로그램을 설치하는 가상 응용프로그램 설치 블록; 및
    상기 설치 장소에 설치된 상기 가상 응용프로그램을 수행시키는 가상 응용프로그램 수행 블록을 포함하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  2. 제 1 항에 있어서, 상기 가상 응용프로그램 설치 블록은,
    상기 응용프로그램의 셋업 파일의 위치 정보 및 상기 응용프로그램을 가상화하여 설치할 설치 장소의 정보를 입력받아 각각 변수로 저장하고, 상기 저장된 변수를 특정 모듈로 제공하는 가상 설치 준비 모듈; 및
    상기 가상 설치 준비 모듈로부터 제공되는 상기 응용프로그램의 셋업 파일의 위치 정보를 이용하여 상기 응용 프로그램의 셋업 파일을 취득하고, 상기 취득된 응용 프로그램의 셋업 파일을 기반으로 응용프로그램 설치 프로세스를 생성하여 일시정지시키고, 일시 정지된 상기 응용프로그램 설치 프로세스가 적재되는 메모리 영역을 수정하여 상기 가상 환경 라이브러리 블록을 삽입한 뒤 상기 응용 프로그램 설치 프로세스를 수행시키는 가상 환경 라이브러리 주입 모듈을 포함하고,
    상기 삽입된 가상 환경 라이브러리 블록은 상기 응용프로그램 설치 프로세스의 수행 시에 상기 응용프로그램 설치 프로세스에 의하여 호출되는 윈도우 네이티브 API를 가상화하여 처리하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  3. 제 2 항에 있어서, 상기 가상 설치 준비 모듈은 상기 가상 응용프로그램의 루트 디렉토리를 인수로 받아 변수 "vm_file_root"에 저장하고, 상기 응용프로그램의 셋업 파일의 위치를 변수 "application"에 저장하고, 상기 저장된 변수 "vm_file_root"를 상기 가상 라이브러리 블록으로 전달하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  4. 제 2 항에 있어서, 상기 가상 설치 준비 모듈은 상기 입력된 설치 장소의 정보에 따라 상기 설치 장소를 검색하여 가상 응용프로그램의 리스트를 생성하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  5. 삭제
  6. 제 1 항에 있어서, 상기 윈도우 네이티브 API는 다수의 클래스로 분류되는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  7. 제 6 항에 있어서, 상기 다수의 클래스는,
    변수 "POBJECT_ATTRIBUTES ObjectAttributes"를 인자로 받고, PHANDLE 타입의 파일 또는 키에 대한 데이터를 리턴하는 윈도우 네이티브 API를 포함하는 제 1 클래스;
    HANDLE 타입의 파일 또는 키에 대한 데이터를 인자로 받고, 오브젝트의 이름과 관련된 문자열을 리턴하는 윈도우 네이티브 API를 포함하는 제 2 클래스; 및
    오브젝트의 자식 오브젝트를 요구하는 윈도우 네이티브 API를 포함하는 제 3 클래스를 포함하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  8. 제 7 항에 있어서, 상기 가상 환경 라이브러리 블록은,
    상기 제 1 클래스에 속하는 윈도우 네이티브 API 중 파일 관련 API를 가상화하여 처리하는 제 1 클래스 가상 파일 처리 모듈;
    상기 제 1 클래스에 속하는 윈도우 네이티브 API 중 레지스트리 관련 API를 가상화하여 처리하는 제 1 클래스 가상 레지스트리 처리 모듈;
    상기 제 2 클래스에 속하는 윈도우 네이티브 API 중 파일 관련 API를 가상화하여 처리하는 제 2 클래스 가상 파일 처리 모듈;
    상기 제 2 클래스에 속하는 윈도우 네이티브 API 중 레지스트리 관련 API를 가상화하여 처리하는 제 2 클래스 가상 레지스트리 처리 모듈;
    상기 제 3 클래스에 속하는 윈도우 네이티브 API 중 파일 관련 API를 가상화하여 처리하는 제 3 클래스 가상 파일 처리 모듈; 및
    상기 제 3 클래스에 속하는 윈도우 네이티브 API 중 레지스트리 관련 API를 가상화하여 처리하는 제 3 클래스 가상 레지스트리 처리 모듈을 포함하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  9. 제 8 항에 있어서, 상기 제 1 클래스 가상 파일 처리 모듈은,
    인수로 주어진 파일 경로가 호스트 경로인지 가상 경로인지를 확인하여, 상기 인수로 주어진 파일 경로가 호스트 경로이면 상기 파일 경로를 변수 "host_path"에 저장한 뒤 가상 경로를 생성하여 "virtual_path"에 저장하고, 상기 인수로 주어진 파일 경로가 가상 경로이면 상기 파일 경로를 변수 "virtual_path"에 저장한 뒤 호스트 경로를 생성하여 변수 "host_path"에 저장하고,
    상기 변수 "host_path"의 파일이 존재하는지를 확인하여, 존재할 경우 변수 "host_exist"의 값을 "TRUE"로 저장하고, 존재하지 않으면 변수 "host_exist"의 값을 "FALSE"로 저장하고,
    상기 변수 "virtual_path"의 파일이 존재하는지를 확인하여, 존재할 경우 변수 "virtual_exist"의 값을 "TRUE"로 저장하고, 존재하지 않으면 변수 "virtual_exist"의 값을 "FALSE"로 저장하고,
    인수로 주어진 옵션이 쓰기 동작인지의 여부를 확인하여, 상기 인수로 주어진 옵션이 쓰기 동작이면 변수 "write" 값을 "TRUE"로 저장하고, 쓰기 동작이 아니면 "write"값을 "FALSE"로 저장하고,
    상기 인수로 주어진 옵션이 삭제 동작인지의 여부를 확인하여, 상기 인수로 주어진 옵션이 삭제 동작이면 변수 "delete" 값을 "TRUE"로 저장하고, 삭제 동작이 아니면 "delete"값을 "FALSE"로 저장하고,
    상기 저장된 변수 "host_exist", "virtual_exist", "write" 및 "delete"의 값에 따라 "virtual_path" 및 "host_path" 중 어느 하나를 인수로 Real_API를 호출하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  10. 제 8 항에 있어서, 상기 제 1 클래스 가상 레지스트리 처리 모듈은,
    인수로 주어진 키 경로가 호스트 경로인지 가상 경로인지를 확인하여, 상기 인수로 주어진 키 경로가 호스트 경로이면 상기 키 경로를 변수 "host_path"에 저장한 뒤 가상 경로를 생성하여 "virtual_path"에 저장하고, 상기 인수로 주어진 키 경로가 가상 경로이면 상기 키 경로를 변수 "virtual_path"에 저장한 뒤 호스트 경로를 생성하여 변수 "host_path"에 저장하고,
    상기 변수 "host_path"의 키가 존재하는지를 확인하여, 존재할 경우 변수 "host_exist"의 값을 "TRUE"로 저장하고, 존재하지 않으면 변수 "host_exist"의 값을 "FALSE"로 저장하고,
    상기 변수 "virtual_path"의 키가 존재하는지를 확인하여, 존재할 경우 변수 "virtual_exist"의 값을 "TRUE"로 저장하고, 존재하지 않으면 변수 "virtual_exist"의 값을 "FALSE"로 저장하고,
    인수로 주어진 옵션이 쓰기 동작인지의 여부를 확인하여, 상기 인수로 주어진 옵션이 쓰기 동작이면 변수 "write" 값을 "TRUE"로 저장하고, 쓰기 동작이 아니면 "write"값을 "FALSE"로 저장하고,
    상기 인수로 주어진 옵션이 삭제 동작인지의 여부를 확인하여, 상기 인수로 주어진 옵션이 삭제 동작이면 변수 "delete" 값을 "TRUE"로 저장하고, 삭제 동작이 아니면 "delete"값을 "FALSE"로 저장하고,
    상기 저장된 변수 "host_exist", "virtual_exist", "write" 및 "delete"의 값에 따라 "virtual_path" 및 "host_path" 중 어느 하나를 인수로 Real_API를 호출하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  11. 제 8 항에 있어서, 상기 제 2 클래스 가상 파일 처리 모듈은 Real_API를 호출하여 주어진 인수의 파일 정보를 가져와 파일 경로와 관련된 정보를 포함하는지를 확인하고, 상기 파일 경로를 포함하는 요청일 경우 상기 파일 경로가 가상 경로인지를 확인하여 가상 경로일 경우 상기 가상 경로를 호스트 경로로 변환하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  12. 제 8 항에 있어서, 상기 제 2 클래스 가상 레지스트리 처리 모듈은 Real_API를 호출하여 주어진 인수의 키 정보를 가져와 키 경로와 관련된 정보를 포함하는지를 확인하고, 상기 키 경로를 포함하는 요청일 경우 상기 키 경로가 가상 경로인지를 확인하여 가상 경로일 경우 상기 가상 경로를 호스트 경로로 변환하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  13. 제 8 항에 있어서, 상기 제 3 클래스 가상 파일 처리 모듈은,
    인수로 주어진 핸들을 핸들 리스트에서 찾아 상기 핸들의 위치 정보를 변수 "file_handle"에 저장하고, 상기 저장된 변수 "file_handle"이 NULL 값인지를 확인하여 NULL 값이 아닐 경우, 상기 "file_handle"에 저장되어 있는 변수 "host_exist" 및 변수 "virtual_exist"의 값을 확인하고, 상기 확인 결과에 따라 상기 변수 "file_handle"에 저장된 변수 "host_handle" 및 변수 "virtual_handle" 중 적어도 어느 하나를 인수로 하여 Real_API를 호출하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  14. 제 13 항에 있어서, 상기 저장된 변수 "file_handle"이 NULL 값일 경우 상기 제 3 클래스 가상 파일 처리 모듈은,
    상기 인수로 주어진 핸들을 파일 경로로 변환하고, 상기 파일 경로가 가상 경로인 경우, 상기 가상 경로를 변수 "virtual_path"에 저장하고, 변수 "virtual_exist"의 값을 "TRUE"로 설정하고, 상기 파일 경로를 호스트 경로로 변환하여 변수 "host_path"에 저장하고, 상기 저장된 변수 "host_path"에 해당하는 디렉토리가 존재하는지를 확인하여 상기 디렉토리가 존재할 경우 변수 "host_exist"를 "TRUE"로 설정한 뒤, 변수 "host_path"를 인수로 핸들을 생성하여 변수 "host_handle"에 저장하고, 상기 디렉토리가 존재하지 않을 경우 상기 변수 "host_exist"를 "FALSE"로 설정하고, 상기 변수 "host_handle"을 "0"으로 하고,
    상기 파일 경로가 호스트 경로일 경우, 상기 호스트 경로를 변수 "host_path"에 저장하고, 변수 "host_exist"의 값을 "TRUE"로 설정하고, 상기 파일 경로를 가상 경로로 변환하여 변수 "virtual_path"에 저장하고, 상기 저장된 변수 "virtual_path"에 해당하는 디렉토리가 존재하는지를 확인하여 상기 디렉토리가 존 재할 경우 변수 "virtual_exist"를 "TRUE"로 설정한 뒤, 변수 "virtual_path"를 인수로 핸들을 생성하여 변수 "virtual_handle"에 저장하고, 상기 디렉토리가 존재하지 않을 경우, 상기 변수 "virtual_exist"를 "FALSE"로 설정하고, 상기 변수 "virtual_handle"을 "0"으로 하고,
    상기 핸들 리스트에 상기 변수"host_handle", 상기 변수 "virtual_handle", 상기 변수 "host_exist", 상기 변수 "virtual_exist"를 삽입한 후 그 위치를 변수 "file_handle"에 저장하고, 상기 "file_handle"에 저장된 상기 변수 "host_exist" 및 상기 변수 "virtual_exist"의 값을 확인하여, 상기 확인 결과에 따라 상기 변수 "file_handle"에 저장된 변수 "host_handle" 및 변수 "virtual_handle" 중 적어도 어느 하나를 인수로 하여 Real_API를 호출하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  15. 제 8 항에 있어서, 상기 제 3 클래스 가상 레지스트리 처리 모듈은,
    인수로 주어진 핸들을 핸들 리스트에서 찾아 상기 핸들의 위치 정보를 변수 "key_handle"에 저장하고, 상기 저장된 변수 "key_handle"이 NULL 값인지를 확인하여 NULL 값일 경우, 상기 "key_handle"에 저장되어 있는 변수 "host_exist" 및 변수 "virtual_exist"의 값을 확인하여, 상기 확인 결과에 따라 상기 변수 "key_handle"에 저장된 변수 "host_handle" 및 변수 "virtual_handle" 중 적어도 어느 하나를 인수로 하여 Real_API를 호출하는 것을 특징으로 하는 가상 응용프로 그램 생성 시스템.
  16. 제 15 항에 있어서, 상기 저장된 변수 "key_handle"이 NULL 값일 경우 상기 제 3 클래스 가상 레지스트리 처리 모듈은,
    상기 인수로 주어진 핸들을 키 경로로 변환하고, 상기 키 경로가 가상 경로인 경우, 상기 가상 경로를 변수 "virtual_path"에 저장하고, 변수 "virtual_exist"의 값을 "TRUE"로 설정하고, 상기 키 경로를 호스트 경로로 변환하여 변수 "host_path"에 저장하고, 상기 저장된 변수 "host_path"에 해당하는 디렉토리가 존재하는지를 확인하여 상기 디렉토리가 존재할 경우 변수 "host_exist"를 "TRUE"로 설정한 뒤, 변수 "host_path"를 인수로 핸들을 생성하여 변수 "host_handle"에 저장하고, 상기 디렉토리가 존재하지 않을 경우 상기 변수 "host_exist"를 "FALSE"로 설정하고, 상기 변수 "host_handle"을 "0"으로 하고,
    상기 키 경로가 호스트 경로일 경우, 상기 호스트 경로를 변수 "host_path"에 저장하고, 변수 "host_exist"의 값을 "TRUE"로 설정하고, 상기 파일 경로를 가상 경로로 변환하여 변수 "virtual_path"에 저장하고, 상기 저장된 변수 "virtual_path"에 해당하는 디렉토리가 존재하는지를 확인하여 상기 디렉토리가 존재할 경우 변수 "virtual_exist"를 "TRUE"로 설정한 뒤, 변수 "virtual_path"를 인수로 핸들을 생성하여 변수 "virtual_handle"에 저장하고, 상기 디렉토리가 존재하지 않을 경우, 상기 변수 "virtual_exist"를 "FALSE"로 설정하고, 상기 변수 "virtual_handle"을 "0"으로 하고,
    상기 핸들 리스트에 상기 변수"host_handle", 상기 변수 "virtual_handle", 상기 변수 "host_exist", 상기 변수 "virtual_exist"를 삽입한 후 그 위치를 변수 "key_handle"에 저장하고, 상기 "key_handle"에 저장된 상기 변수 "host_exist" 및 상기 변수 "virtual_exist"의 값을 확인하여, 상기 확인 결과에 따라 상기 변수 "key_handle"에 저장된 변수 "host_handle" 및 변수 "virtual_handle" 중 적어도 어느 하나를 인수로 하여 Real_API를 호출하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  17. 제 7 항에 있어서, 상기 다수의 클래스는,
    응용프로그램의 설치 프로세스 시에 사용되는 윈도우 네이티브 API를 포함하는 제 4 클래스; 및
    응용프로그램 수행 시에 레지스트리의 저장, 복구 및 삭제에 사용되는 윈도우 네이티브 API를 포함하는 제 5 클래스를 더 포함하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  18. 제 17 항에 있어서, 상기 가상 환경 라이브러리 블록은,
    상기 제 4 클래스에 속하는 윈도우 네이티브 API를 가상화하여 처리하는 제 4 클래스 가상 환경 라이브러리 주입 모듈; 및
    상기 제 5 클래스에 속하는 윈도우 네이티브 API를 가상화하여 처리하는 제 5 클래스 가상 레지스트리 저장 모듈, 제 5 클래스 가상 레지스트리 복구 모듈 및 제 5 클래스 레지스트리 삭제 모듈을 더 포함하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  19. 제 1 항에 있어서, 상기 가상 응용프로그램 수행 블록은,
    수행하고자 하는 가상 응용프로그램의 루트 디렉토리의 정보 및 상기 가상 응용프로그램의 위치 정보를 각각 변수로 저장하고, 상기 저장된 변수를 특정 모듈로 제공하는 가상 수행 준비 모듈; 및
    상기 가상 수행 준비 모듈로부터 제공되는 정보를 이용하여 가상 응용프로그램 수행 프로세스를 생성하고, 상기 가상 응용프로그램을 수행하는 가상 응용프로그램 수행 모듈을 포함하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  20. 제 19 항에 있어서, 상기 가상 응용프로그램 수행 모듈은,
    상기 가상 수행 준비 모듈로부터 제공되는 정보를 이용하여, 상기 가상 응용프로그램의 이름과, 실행 명령 및 커맨드 라인 파라미터를 생성하고, 상기 가상 응용프로그램의 수행 프로세스를 시작하기 위한 플래그를 설정하고, 상기 가상 환경 라이브러리 블록과 함께 상기 생성된 실행 명령 및 커맨드 라인을 사용하여 상기 가상 응용프로그램 수행 프로세스를 생성하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  21. 제 19 항에 있어서, 상기 가상 응용프로그램 수행 블록은,
    윈도우 클래스를 초기화하고, 상기 초기화한 윈도우 클래스를 등록한 뒤 윈도우를 생성하고 상기 생성된 윈도우의 윈도우 핸들을 취득하는 윈도우 생성 모듈;
    태스크바에 상기 가상 응용프로그램 수행 블록의 아이콘을 생성하는 태스크바 아이콘 생성 모듈;
    상기 태스트바 아이콘 생성 모듈에 의하여 생성된 아이콘의 조작에 따른 콜백 메시지를 처리하는 콜백 메시지 처리 모듈; 및
    상기 콜백 메시지 처리 모듈의 호출에 따라 상기 팝업 메뉴를 생성하고, 상기 생성된 팝업 메뉴에 상기 설치된 가상 응용프로그램을 선택할 수 있는 가상 응용프로그램 목록을 메뉴로 등록하는 태스크바 팝업 메뉴 생성 모듈을 더 포함하는 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  22. 제 1 항에 있어서, 상기 설치 장소는 외부 저장 장치에 마련된 특정 디렉토리인 것을 특징으로 하는 가상 응용프로그램 생성 시스템.
  23. 삭제
  24. 윈도우 네이티브 API(Application Program Interface)를 가상화하여 처리할 수 있는 모듈을 다수개 구비하는 가상 환경 라이브러리를 이용하여 상기 윈도우 네이티브 API의 호출을 처리하는 방법에 있어서,
    가상 응용프로그램의 설치 및 수행 시 특정한 윈도우 네이티브 API가 호출되면, 상기 다수개의 상기 모듈 중 상기 호출된 윈도우 네이티브 API를 처리할 수 있는 모듈을 확인하는 단계; 및
    상기 단계에서 확인된 모듈을 수행시켜 상기 호출된 윈도우 네이티브 API의 기능을 가상화하여 처리하는 단계를 포함하는 것을 특징으로 하는 네이티브 API 호출 처리 방법.
  25. 삭제
KR1020070082485A 2007-08-16 2007-08-16 가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치방법, 네이티브 api 호출 처리 방법 및 가상응용프로그램 수행 방법 KR100927442B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020070082485A KR100927442B1 (ko) 2007-08-16 2007-08-16 가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치방법, 네이티브 api 호출 처리 방법 및 가상응용프로그램 수행 방법
US12/673,684 US8677345B2 (en) 2007-08-16 2008-08-13 System for creating virtual application, method for installing virtual application, method for calling native API and method for executing virtual application
PCT/KR2008/004713 WO2009022861A2 (en) 2007-08-16 2008-08-13 System for creating virtual application, method for installing virtual application, method for calling native api and method for executing virtual application

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020070082485A KR100927442B1 (ko) 2007-08-16 2007-08-16 가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치방법, 네이티브 api 호출 처리 방법 및 가상응용프로그램 수행 방법

Publications (2)

Publication Number Publication Date
KR20090017942A KR20090017942A (ko) 2009-02-19
KR100927442B1 true KR100927442B1 (ko) 2009-11-19

Family

ID=40351304

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070082485A KR100927442B1 (ko) 2007-08-16 2007-08-16 가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치방법, 네이티브 api 호출 처리 방법 및 가상응용프로그램 수행 방법

Country Status (3)

Country Link
US (1) US8677345B2 (ko)
KR (1) KR100927442B1 (ko)
WO (1) WO2009022861A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101011145B1 (ko) * 2010-06-15 2011-01-26 주식회사 파수닷컴 응용 모듈 삽입 장치, 응용 모듈 삽입 기능을 구비한 컴퓨팅 장치 및 응용 모듈 삽입 방법을 실행하기 위한 프로그램을 기록한 기록매체

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8230417B1 (en) * 2007-06-08 2012-07-24 Adobe Systems Incorporated Combined application and execution environment install
US8448161B2 (en) 2007-07-30 2013-05-21 Adobe Systems Incorporated Application tracking for application execution environment
US7930273B1 (en) 2007-07-30 2011-04-19 Adobe Systems Incorporated Version management for application execution environment
US8375381B1 (en) 2007-07-30 2013-02-12 Adobe Systems Incorporated Management user interface for application execution environment
KR101013509B1 (ko) * 2008-01-04 2011-02-11 주식회사 마크애니 가상 응용 프로그램 시스템, 저장장치, 가상 응용 프로그램수행 방법 및 가상 환경 보호 방법
WO2009088175A2 (en) * 2008-01-04 2009-07-16 Markany Inc. Virtual application program system, storing device, method for executing virtual application program and method for protecting virtual environment
US8776038B2 (en) 2008-08-07 2014-07-08 Code Systems Corporation Method and system for configuration of virtualized software applications
US8434093B2 (en) 2008-08-07 2013-04-30 Code Systems Corporation Method and system for virtualization of software applications
WO2009007468A2 (en) * 2008-09-26 2009-01-15 Phonak Ag Wireless updating of hearing devices
US8402458B1 (en) * 2009-03-18 2013-03-19 Symantec Corporation Methods and systems for converting non-layered-software-application installations into layered installations
WO2010113738A1 (ja) 2009-03-31 2010-10-07 凸版印刷株式会社 Elパネル及びそれを用いた照明装置及び表示装置
US20110078021A1 (en) * 2009-09-30 2011-03-31 John Tullis Mobile Device Including Mobile Application Coordinating External Data
US10089119B2 (en) 2009-12-18 2018-10-02 Microsoft Technology Licensing, Llc API namespace virtualization
US8954958B2 (en) * 2010-01-11 2015-02-10 Code Systems Corporation Method of configuring a virtual application
US9104517B2 (en) 2010-01-27 2015-08-11 Code Systems Corporation System for downloading and executing a virtual application
US8959183B2 (en) 2010-01-27 2015-02-17 Code Systems Corporation System for downloading and executing a virtual application
US9229748B2 (en) 2010-01-29 2016-01-05 Code Systems Corporation Method and system for improving startup performance and interoperability of a virtual application
US8468542B2 (en) 2010-03-04 2013-06-18 Microsoft Corporation Virtual environment for server applications, such as web applications
US8763009B2 (en) 2010-04-17 2014-06-24 Code Systems Corporation Method of hosting a first application in a second application
US8782106B2 (en) 2010-07-02 2014-07-15 Code Systems Corporation Method and system for managing execution of virtual applications
US9021015B2 (en) 2010-10-18 2015-04-28 Code Systems Corporation Method and system for publishing virtual applications to a web server
US9209976B2 (en) 2010-10-29 2015-12-08 Code Systems Corporation Method and system for restricting execution of virtual applications to a managed process environment
US8892707B2 (en) 2011-04-13 2014-11-18 Netapp, Inc. Identification of virtual applications for backup in a cloud computing system
US9122551B2 (en) * 2011-06-17 2015-09-01 The Boeing Comapny Methods and systems for generating read-only operating systems
US8776094B2 (en) 2011-08-11 2014-07-08 Microsoft Corporation Runtime system
US8695021B2 (en) 2011-08-31 2014-04-08 Microsoft Corporation Projecting native application programming interfaces of an operating system into other programming languages
US10282221B2 (en) * 2011-12-09 2019-05-07 International Business Machines Corporation Controlling usage of virtual disks before their attachment to virtual machines
US9130979B2 (en) * 2012-12-11 2015-09-08 Microsoft Technology Licensing, Llc Systems and methods for using virtual machines to sequence native applications into virtual packages and for reimaging virtual machines
US9323514B2 (en) * 2013-05-30 2016-04-26 Microsoft Technology Licensing, Llc Resource package indexing
KR102067017B1 (ko) 2014-01-27 2020-02-11 한국전자통신연구원 매쉬업 서비스를 위한 가상 api 제공 장치 및 방법
US9471283B2 (en) * 2014-06-11 2016-10-18 Ca, Inc. Generating virtualized application programming interface (API) implementation from narrative API documentation
US10635504B2 (en) 2014-10-16 2020-04-28 Microsoft Technology Licensing, Llc API versioning independent of product releases
US10802810B2 (en) * 2016-12-27 2020-10-13 Sap Se Consuming persistent library bundles
US11785070B2 (en) * 2021-10-22 2023-10-10 Slcket, Inc. Connected cloud applications

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020041221A (ko) * 2000-11-27 2002-06-01 이진혁 외부저장장치를 이용한 컴퓨터의 환경을 설정하고복구하는 방법 및 컴퓨터 환경 설정/복구 장치
KR20040069510A (ko) * 2003-01-29 2004-08-06 삼성전자주식회사 백업/복원이 용이한 백업장치 및 백업방법
JP2005050314A (ja) 2003-07-30 2005-02-24 Softonnet Inc アプリケーションソフトウェアストリーミングのためのアプリケーションソフトウェア再パッケージシステム、及びその方法
US20070168937A1 (en) 2005-11-28 2007-07-19 Soummya Mallick Apparatus and method of application virtualization

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04191941A (ja) * 1990-11-27 1992-07-10 Hitachi Ltd オブジェクト管理システム
US6363409B1 (en) * 1995-04-24 2002-03-26 Microsoft Corporation Automatic client/server translation and execution of non-native applications
US6964039B2 (en) * 2000-12-13 2005-11-08 Esmertec Ag Method to create optimized machine code through combined verification and translation of JAVA™ bytecode
US7155381B2 (en) * 2001-03-12 2006-12-26 Sun Microsystems, Inc. Module for developing wireless device applications using an integrated emulator
US6978451B2 (en) * 2001-05-31 2005-12-20 Esmertec Ag Method for fast compilation of preverified JAVA bytecode to high quality native machine code
US7367028B2 (en) * 2001-08-14 2008-04-29 National Instruments Corporation Graphically deploying programs on devices in a system
US7305671B2 (en) * 2002-03-22 2007-12-04 Sun Microsystems, Inc. Conversion of an object model to a source file generation model
US7565647B2 (en) * 2002-03-22 2009-07-21 Sun Microsystems, Inc. Markup compiler that outputs MIDlets
US7512932B2 (en) * 2002-03-22 2009-03-31 Sun Microsystems, Inc. Language and object model for describing MIDlets
US8122106B2 (en) * 2003-03-06 2012-02-21 Microsoft Corporation Integrating design, deployment, and management phases for systems
US8209680B1 (en) * 2003-04-11 2012-06-26 Vmware, Inc. System and method for disk imaging on diverse computers
US20040240408A1 (en) * 2003-06-02 2004-12-02 Mobimate Ltd. System, method and apparatus for the generation and deployment of mobile applications
US20050108690A1 (en) * 2003-11-17 2005-05-19 Tira Wireless Inc. System and method of generating applications for mobile devices
US7877747B2 (en) * 2004-02-20 2011-01-25 Hewlett-Packard Development Company, L.P. Flexible operating system operable as either native or as virtualized
US7493604B2 (en) * 2004-10-21 2009-02-17 Microsoft Corporation Conditional compilation of intermediate language code based on current environment
US7886294B2 (en) * 2004-12-28 2011-02-08 Sap Ag Virtual machine monitoring
US7895594B2 (en) * 2005-03-28 2011-02-22 Freescale Semiconductor, Inc. Virtual machine extended capabilities using application contexts in a resource-constrained device
US8549513B2 (en) * 2005-06-29 2013-10-01 Microsoft Corporation Model-based virtual system provisioning
US7689558B2 (en) * 2005-09-09 2010-03-30 Sap Ag Application monitoring using profile points
US8490070B2 (en) * 2005-11-16 2013-07-16 Myriad Group Ag Unified mobile platform
US20070240171A1 (en) * 2006-03-29 2007-10-11 Nokia Corporation Device, Method, And Computer Program Product For Accessing A Non-Native Application Executing In Virtual Machine Environment
US8136100B1 (en) * 2006-08-29 2012-03-13 Adobe Systems Incorporated Software installation and icon management support
US8296742B2 (en) * 2006-10-10 2012-10-23 Microsoft Corporation Automatic native generation
US8707337B2 (en) * 2006-10-31 2014-04-22 Motorola Mobility Llc Dispatch API that permits midlets to initiate dispatch calls
US8028269B2 (en) * 2007-03-09 2011-09-27 International Business Machines Corporation Compliance management method and system
US20090063614A1 (en) * 2007-08-27 2009-03-05 International Business Machines Corporation Efficiently Distributing Class Files Over A Network Without Global File System Support
US8615594B2 (en) * 2009-07-15 2013-12-24 Aten International Co., Ltd. Virtual media with folder-mount function
JP5526668B2 (ja) * 2009-09-09 2014-06-18 株式会社リコー パッケージのインストール対象装置、インストール方法、プログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020041221A (ko) * 2000-11-27 2002-06-01 이진혁 외부저장장치를 이용한 컴퓨터의 환경을 설정하고복구하는 방법 및 컴퓨터 환경 설정/복구 장치
KR20040069510A (ko) * 2003-01-29 2004-08-06 삼성전자주식회사 백업/복원이 용이한 백업장치 및 백업방법
JP2005050314A (ja) 2003-07-30 2005-02-24 Softonnet Inc アプリケーションソフトウェアストリーミングのためのアプリケーションソフトウェア再パッケージシステム、及びその方法
US20070168937A1 (en) 2005-11-28 2007-07-19 Soummya Mallick Apparatus and method of application virtualization

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101011145B1 (ko) * 2010-06-15 2011-01-26 주식회사 파수닷컴 응용 모듈 삽입 장치, 응용 모듈 삽입 기능을 구비한 컴퓨팅 장치 및 응용 모듈 삽입 방법을 실행하기 위한 프로그램을 기록한 기록매체

Also Published As

Publication number Publication date
US20110072424A1 (en) 2011-03-24
WO2009022861A3 (en) 2009-04-23
KR20090017942A (ko) 2009-02-19
WO2009022861A2 (en) 2009-02-19
US8677345B2 (en) 2014-03-18

Similar Documents

Publication Publication Date Title
KR100927442B1 (ko) 가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치방법, 네이티브 api 호출 처리 방법 및 가상응용프로그램 수행 방법
US5999942A (en) Method and apparatus for enforcement of behavior of application processing systems without modifying application processing systems
KR100986415B1 (ko) 커맨드 바인딩을 수행하기 위한 데이터-바인딩 매카니즘의 애플리케이션
CN101069157B (zh) 用于访问资源的方法和系统
US8464242B2 (en) Virtualization of configuration settings
Richter et al. Windows via C/C++
US10162605B2 (en) Code snippet content recommendation to define an object literal
KR20040063837A (ko) 언어 독립 구문으로 매크로를 기록하기 위한 방법 및 시스템
WO2014197239A1 (en) Automatic mediation of resource access in mobile applications
US11403074B1 (en) Systems and methods for generating interfaces for callback functions in object-oriented classes
US9311111B2 (en) Programming environment with support for handle and non-handle user-created classes
Balzer et al. Mediating connectors: A non-bypassable process wrapping technology
US10409567B2 (en) Trimming unused dependencies using package graph and module graph
JP4288017B2 (ja) コンピュータ構成のためのテキスト・ファイルを変更する方法及びシステム
WO2018103223A1 (zh) 一种操作数据库的方法及装置
CN114026540B (zh) 用于支持和协商跨多个产品的多个api版本的系统和方法
CN115390720A (zh) 包括自动文档滚动的机器人过程自动化(rpa)
Paro Elasticsearch 7.0 Cookbook: Over 100 recipes for fast, scalable, and reliable search for your enterprise
JP3767666B2 (ja) ワークフロー管理システム
US7036113B1 (en) Detection of resource exceptions
US20230132877A1 (en) Displaying multiple representations of system management operations in a user interface
KR100580239B1 (ko) 동일 확장자를 가진 파일들을 그룹화한 명령어 처리기 및 동일확장자 그룹화에 의한 프로그램 수행방법
US20230036834A1 (en) Information processing system, apparatus, and storage medium having combinational and non-combinational applications
JPH09330260A (ja) 文書管理装置
Kainz et al. Automated model-to-metamodel transformations based on the concepts of deep instantiation

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121112

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20131111

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20141111

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20151111

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20161110

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20171102

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20181101

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20191024

Year of fee payment: 11