CreateProcess
9/8/2008
Essa função é usada para executar um novo programa. Ele cria um novo processo e seu primário segmento. O novo processo é executado o arquivo executável especificado.
Observação
O remoto aplicativo versão interface (RAPI) desta função é nomeado CeCreateProcess (RAPI).
Syntax
BOOL CreateProcess(
LPCWSTR pszImageName,
LPCWSTR pszCmdLine,
LPSECURITY_ATTRIBUTES psaProcess,
LPSECURITY_ATTRIBUTES psaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID pvEnvironment,
LPWSTR pszCurDir,
LPSTARTUPINFOW psiStartInfo,
LPPROCESS_INFORMATION pProcInfo
);
Parameters
pszImageName
[no] Ponteiro para uma seqüência de caracteres NULL-Terminated que especifica o módulo para executar.O seqüência de caracteres podem especificar a caminho completo e nome do arquivo do módulo para executar ou ele podem especificar um parcial caminho e nome do arquivo.
O lpszImageName parâmetro deve ser não-NULL e deve incluir nome de módulo.
pszCmdLine
[in, Out] Ponteiro para uma seqüência de caracteres NULL-Terminated que especifica o linha de comando para executar.O sistema adiciona um NULL caractere para a linha de comando, aparando a seqüência de caracteres se necessário, para indicar qual arquivo foi usado.
O lpszCmdLine parâmetro pode ser NULL. Em que maiúsculas e minúsculas, a função usa o seqüência de caracteres apontado pelo lpszImageName Como a linha de comando.
Se lpszImageName e lpszCmdLine São não-NULL * lpszImageName Especifica o módulo para executar, e * lpszCmdLine Especifica a linha de comando.
Os processos tempo de execução c podem usar o argc e argv Argumentos.
Se o nome do arquivo não contém uma extensão, .exe será adotada.
Se o nome do arquivo termina em um período (.) com nenhuma extensão, ou se o nome do arquivo contém um caminho, .exe não é acrescentado.
- psaProcess
[no] Não com suporte; Definir como NULL.
- psaThread
[no] Não com suporte; Definir como NULL.
- fInheritHandles
[no] Não com suporte; Defina como FALSE.
fdwCreate
[no] Especifica outros sinalizadores que controle a prioridade e a criação do processo.A seguinte tabela mostra os sinalizadores de criação que podem ser especificados em qualquer combinação, exceto como observado.
Valor Descrição CREATE_DEFAULT_ERROR_MODE
Não suportado.
CREATE_NEW_CONSOLE
O novo processo possui um novo console, instead of herdar console do pai de.
CREATE_NEW_PROCESS_GROUP
Não suportado.
CREATE_SEPARATE_WOW_VDM
Não suportado.
CREATE_SHARED_WOW_VDM
Não suportado.
CREATE_SUSPENDED
O primário segmento do novo processo é criado em um estado suspenso e não executar até que a função ResumeThread seja chamado.
CREATE_UNICODE_ENVIRONMENT
Não suportado.
DEBUG_PROCESS
Se este sinalizador estiver definido, o processo de chamada é tratado como um depurador, e o novo processo é um processo sendo depurado. Processos filho do novo processo também são depurados.
O sistema notifica o depurador de todos os eventos de depuração que ocorrem no processo que está sendo depurado.
Se você criar um processo com esse conjunto sinalizador, somente o segmento chamado (o segmento que chamado CreateProcess) podem chamar a função WaitForDebugEvent.
DEBUG_ONLY_THIS_PROCESS
Se este sinalizador estiver definido, o processo de chamada é tratado como um depurador, e o novo processo é um processo sendo depurado. Nenhum processo filho do novo processo é depurado.
O sistema notifica o depurador de todos os eventos de depuração que ocorrem no processo que está sendo depurado.
DETACHED_PROCESS
Não suportado.
INHERIT_CALLER_PRIORITY
Se este sinalizador estiver definido, o novo processo herdará a prioridade do processo de criador.
Windows Embedded CE não suporte a concepção de uma classe prioridade. A prioridade de um segmento é o único parâmetro que determina prioridade de agendamento de um segmento.
- pvEnvironment
[no] Não com suporte; Definir como NULL.
- pszCurDir
[no] Não com suporte; Definir como NULL.
- psiStartInfo
[no] Não com suporte; Definir como NULL.
pProcInfo
[out] Ponteiro para uma estrutura PROCESS_INFORMATION que recebe informações de identificação sobre o novo processo.Ao usar o CreateProcess função, o processo e segmento alças retornadas na PROCESS_INFORMATION estrutura somente pode ser usada para sinalização finalidades, como Em Espera e para consultar a codificar sair do processo ou segmento com a função GetExitCodeProcess.
Funções such as ReadProcessMemory WriteProcessMemorye TerminateProcess devem usar o identificador retornado de OpenProcess.
Isso impede que um aplicativo privilégio baixa do que possui o espaço processo do aplicativo alto privilégio que ele iniciado. Para obter acessar para o espaço do processo gerado, o aplicativo deve chamar o OpenProcess função para obter um identificador completo para o processo. OpenProcess Verifica o privilégio nível do chamador antes de retornar um identificador para o processo. Isso permite que um aplicativo baixo privilégio para gerar um aplicativo alto privilégio sem comprometer depois do aplicativo privilégio de alta segurança. De exemplo, um shell pode iniciar uma administrativo ou um digital Rights aplicativo gerenciamento (DRM) sem automaticamente dando-controle através desse aplicativo.
O identificador retornado pela CreateProcess função possui acessar PROCESS_ALL_ACCESS para o objeto processo.
Return Value
Nonzero indica sucesso. Zero indica falha. Para informações de erro estendidas get, chamar GetLastError.
Remarks
A função DebugActiveProcess e CreateProcess função habilitar um segmento depurador para criar um processo e anexar para o processo ou anexar a um processo existente e depuração-lo. Essas funções devem:
- Parar todos os segmentos dentro de processo fornecido pelo dwProcessId.
- Criar ler e Gravar extremidades do fila de mensagens em tanto o depurador e os processos elemento a ser depurado.
- Criar um segmento para gravar o atual estado do aplicativo: Criando um processo, carregando os módulos, criar eventos depuração e assim por diante.
- Return para o depurador.
- Quando essas funções retornam, o segmento depurador precisa para chamar a função WaitForDebugEvent para processamento iniciar todos os eventos depuração do processo de destino.
Bem como criar um processo, ele também cria um objeto segmento.
O tamanho da pilha inicial para o segmento está descrito no cabeçalho de imagem de arquivo executável do programa especificado.
O segmento iniciará a execução em ponto de entrada da imagem.
O processo é atribuído uma 32-bit processo identificador. O identificador é válido até que o processo termina. Ele pode ser usado para identificar o processo, ou especificado na função OpenProcess para aberto um identificador para o processo.
O segmento inicial no processo também é atribuído um 32-bit segmento identificador. O identificador é válido até que o segmento é encerrado e pode ser usado para identificar com exclusividade o segmento dentro de sistema. Esses identificadores são retornados a PROCESS_INFORMATION estrutura.
A seguinte lista mostra as pastas indicadas pela pszImageName parâmetro na ordem que Windows Embedded CE procura-los:
- O Diretório Windows (\Windows).
- O Diretório raiz (\) do dispositivo.
- Um Diretório OEM-specified.
A seguinte lista mostra as pastas indicadas pela pszImageName parâmetro na ordem que Windows CE 2.10 e pesquisa posterior-los:
- O Diretório Windows (\Windows).
- O Diretório raiz (\) do dispositivo.
- Um OEM-dependente Diretório.
- O shell OEM-defined (\ceshell) Diretório (Platform Builder usuários somente).
A seguinte lista mostra as pastas indicadas pela pszImageName parâmetro na ordem Windows CE 1.0 através de 2.01 procura-los:
- A raiz do PC Card, se ela existir.
- O Diretório Windows (\Windows).
- O Diretório raiz (\) do dispositivo.
Ao especificar um nome do aplicativo in a pszImageName seqüência de caracteres, não importa se a nome do aplicativo inclui a extensão nome do arquivo.
Fazer não chamar CreateProcess de uma função DllMain. Isso faz com que o aplicativo para parar responder.
A seguinte subchave Registro especifica um caminho pesquisa a ser usado com a função LoadLibrary e CreateProcess:
HKEY_LOCAL_MACHINE\Loader
"SystemPath" = multi_sz:"\\path1\\"
"\\path2\\"
O caminho é pesquisado somente se o caminho do arquivo sendo procurou não estiver explicitamente especificada.
Se o comprimento das SystemPath valor excede 260 caracteres, o caminho é ignorado. Uma alteração para o SystemPath chave não terá efeito até que um Windows Embedded CE - é baseado no dispositivo redefinir.
ExitThread CreateThread e um processo que está iniciando (como o resultado de uma chamar por CreateProcess) são serializado entre each other em um processo. Somente um desses eventos pode acontecer em um espaço de endereço em um tempo. A seguinte lista mostra as restrições durante o processo:
- Durante inicialização processo e rotinas inicialização DLL, novos segmentos podem ser criados, mas eles não comecem a execução até que DLL inicialização seja concluída.
- Em um processo, somente um segmento em um tempo pode estar em uma rotina inicialização ou desanexar DLL.
O processo criado permanece no sistema até que todos os segmentos dentro de processo são finalizados e todos os identificadores para o processo e seus segmentos estão fechados por chamadas para CloseHandle.
As alças para o processo e o segmento principal devem ser fechadas por chamadas para CloseHandle. Se essas alças não forem necessários, fechá-los imediatamente depois que o processo for criado.
O seguinte ocorrer eventos quando termina o último segmento em um processo:
- Todos os objetos abertos, o processo estão implicitamente fechados.
- Status terminação do processo de, que é retornado pela GetExitCodeProcess, muda de seu valor inicial de STILL_ACTIVE para o status terminação do último segmento para finalizar.
- O objeto segmento do segmento principal é definido como o sinalizado estado, que satisfaz segmentos que estavam aguardando sobre o objeto.
- O objeto processo é definido como o sinalizado estado, que satisfaz segmentos que estavam aguardando sobre o objeto.
Requirements
Header | winbase.h |
Library | coredll.lib |
Windows Embedded CE | Windows CE 1.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |
See Also
Reference
Process and Thread Functions
CreateThread
DllMain
ExitThread
GetExitCodeProcess
LoadLibrary
OpenProcess
PROCESS_INFORMATION
ReadProcessMemory
ResumeThread
TerminateProcess
WaitForDebugEvent
WriteProcessMemory