Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade

Como Utilizar Chamadas de Sistema no Ambiente Windows

As chamadas de sistema, ou system calls, são um conceito fundamental em sistemas operacionais, permitindo que programas de usuário solicitem serviços do kernel do sistema. No ambiente Windows, as chamadas de sistema são menos expostas diretamente ao usuário em comparação com sistemas Unix-like. Em vez disso, a Microsoft proporciona APIs (Application Programming Interfaces) que encapsulam essas chamadas. Este artigo explora como utilizar essas APIs para realizar operações que, em outros sistemas, seriam feitas diretamente via chamadas de sistema.

Exemplos:

  1. Criar um Processo: No Windows, a criação de um processo pode ser realizada utilizando a função CreateProcess da API do Windows.

    #include <windows.h>
    #include <stdio.h>
    
    int main() {
       STARTUPINFO si;
       PROCESS_INFORMATION pi;
       ZeroMemory(&si, sizeof(si));
       si.cb = sizeof(si);
       ZeroMemory(&pi, sizeof(pi));
    
       // Cria um processo filho.
       if (!CreateProcess(NULL,   // Nome do módulo
           "C:\\Windows\\System32\\notepad.exe", // Comando a ser executado
           NULL,           // Atributos de segurança do processo
           NULL,           // Atributos de segurança da thread
           FALSE,          // Herança de handles
           0,              // Flags de criação
           NULL,           // Variáveis de ambiente
           NULL,           // Diretório atual
           &si,            // Ponteiro para a estrutura STARTUPINFO
           &pi)            // Ponteiro para a estrutura PROCESS_INFORMATION
       ) {
           printf("CreateProcess falhou (%d).\n", GetLastError());
           return -1;
       }
    
       // Aguarda a conclusão do processo filho.
       WaitForSingleObject(pi.hProcess, INFINITE);
    
       // Fecha os handles do processo e da thread.
       CloseHandle(pi.hProcess);
       CloseHandle(pi.hThread);
    
       return 0;
    }
  2. Ler e Escrever em Arquivos: A leitura e escrita em arquivos no Windows podem ser feitas utilizando as funções ReadFile e WriteFile.

    #include <windows.h>
    #include <stdio.h>
    
    int main() {
       HANDLE hFile;
       DWORD dwBytesToWrite = (DWORD)strlen("Hello, World!");
       DWORD dwBytesWritten = 0;
       BOOL bErrorFlag = FALSE;
    
       hFile = CreateFile("example.txt",                // nome do arquivo
                          GENERIC_WRITE,               // acesso de escrita
                          0,                            // sem compartilhamento
                          NULL,                         // atributo de segurança padrão
                          CREATE_NEW,                   // cria novo arquivo
                          FILE_ATTRIBUTE_NORMAL,        // atributos normais
                          NULL);                        // sem template
    
       if (hFile == INVALID_HANDLE_VALUE) {
           printf("CreateFile falhou (%d)\n", GetLastError());
           return -1;
       }
    
       bErrorFlag = WriteFile(
           hFile,           // handle do arquivo
           "Hello, World!", // dados a serem escritos
           dwBytesToWrite,  // número de bytes a serem escritos
           &dwBytesWritten, // número de bytes escritos
           NULL);           // sem estrutura OVERLAPPED
    
       if (FALSE == bErrorFlag) {
           printf("WriteFile falhou (%d)\n", GetLastError());
       } else {
           if (dwBytesWritten != dwBytesToWrite) {
               printf("WriteFile falhou: número de bytes escritos diferente do esperado.\n");
           } else {
               printf("Escrita bem-sucedida.\n");
           }
       }
    
       CloseHandle(hFile);
    
       return 0;
    }

To share Download PDF

Gostou do artigo? Deixe sua avaliação!
Sua opinião é muito importante para nós. Clique em um dos botões abaixo para nos dizer o que achou deste conteúdo.