Bagikan melalui


WinPE: Membuat Aplikasi

Windows PE (WinPE) dilisensikan ke produsen peralatan asli (OEM) untuk membuat utilitas penyebaran dan pemulihan yang disesuaikan. Topik ini menyediakan panduan bagi OEM untuk mengembangkan aplikasi penyebaran dan pemulihan yang berjalan di Windows PE.

Catatan Windows PE bukan sistem operasi tujuan umum. Ini mungkin tidak digunakan untuk tujuan apa pun selain penyebaran dan pemulihan. Ini tidak boleh digunakan sebagai klien tipis atau sistem operasi yang disematkan.

Diperpanjang

Sebagian besar aplikasi Pe Windows adalah aplikasi shell fungsi tetap yang menyediakan GUI mereka sendiri. Dua contohnya adalah aplikasi Penyiapan Windows dan Lingkungan Pemulihan Windows (Windows RE).

  • Jika dapat diterima untuk menampilkan prompt perintah, maka ubah Startnet.cmd - ini adalah cara paling nyaman untuk memulai aplikasi secara otomatis. Lihat WinPE: Pasang dan Sesuaikan.

  • Agar aplikasi Anda melewati baris perintah dan memulai di GUI Anda, gunakan Winpeshl.exe, Wpeinit.exe, wpeutil.exe, dan wpeutil.dll.

Winpeshl.exe, Wpeinit.exe, wpeutil.exe, dan wpeutil.dll

Secara default, Winpeshl.exe adalah proses pertama yang dijalankan ketika Windows PE di-boot. Ini ditentukan oleh nilai registri berikut dari jenis REG_SZ.

HKEY_LOCAL_MACHINE
   System
      Setup
         CmdLine

Winpeshl.exe mencari file yang disebut Winpeshl.ini. Jika file tidak ada, Winpeshl.exe memulai proses Cmd.exe yang menjalankan skrip Startnet.cmd. Jika Winpeshl.ini memang ada dan berisi aplikasi untuk diluncurkan, aplikasi ini dijalankan alih-alih Cmd.exe.

Wpeinit.exe menginstal perangkat Plug and Play (PnP), memulai tumpukan jaringan, dan memproses pengaturan Unattend.xml ketika Windows PE dimulai. Untuk informasi selengkapnya, lihat Wpeinit dan Startnet.cmd: Menggunakan Skrip Startup WinPE.

Jaringan dapat dimulai kapan saja dengan menjalankan baik dengan mengizinkan Wpeinit.exe berjalan ketika Windows PE dimulai, atau dengan menjalankan perintah Opsi Command-Line Wpeutil .

Aplikasi shell yang disesuaikan dapat memanggil langsung ke Wpeutil.dll dengan fungsi LoadLibrary dan GetProcAddress .

Masing-masing fungsi yang diekspor oleh Wpeutil.dll memiliki tanda tangan fungsi yang sama dengan Fungsi WinMain, seperti yang diilustrasikan dalam sampel kode berikut.

int InitializeNetworkingW(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);

Sampel kode berikut menggambarkan cara menginisialisasi jaringan.

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
typedef int (*WpeutilFunction)( 
HINSTANCE hInst, 
HINSTANCE hPrev, 
LPTSTR lpszCmdLine, 
int nCmdShow 
);
int __cdecl _tmain( int argc, TCHAR *argv[] )
{
    
HMODULE         hWpeutil          = NULL;
    
WpeutilFunction InitializeNetwork = NULL;
    
int             result            = 0;
    
TCHAR           szCmdLine[]       = _T("");
    
hWpeutil = LoadLibrary( _T("wpeutil") );
    
if( NULL == hWpeutil )
    
{
        _tprintf( _T("Unable to load wpeutil.dll \ n") );
        
return GetLastError();
}
    
InitializeNetwork = (WpeutilFunction)GetProcAddress( 
hWpeutil, 
"InitializeNetworkW" 
);
    
if( NULL == InitializeNetwork )
    
{
        
FreeLibrary( hWpeutil );
        
return GetLastError();
    
}
    
result = InitializeNetwork( NULL, NULL, szCmdLine, SW_SHOW );
    
if( ERROR_SUCCESS == result )
    
{
        _tprintf( _T("Network initialized. \ n") );
    
}
  
else
    
{
        _tprintf( _T("Initialize failed: 0x%08x"), result );
    
}
    
FreeLibrary( hWpeutil );

return result;}

Untuk daftar lengkap ekspor Wpeutil.dll, lihat Opsi Command-Line Wpeutil.

Pengaturan proyek Visual Studio

Beberapa pengaturan proyek Visual Studio dasar mungkin berbeda dari default yang dibuat oleh Visual Studio Project Wizard. Pastikan Anda menyiapkan pengaturan build proyek untuk menghasilkan aplikasi dan DLL yang kompatibel dengan Windows PE, sebagai berikut:

  1. Anda harus mengembangkan aplikasi Windows PE dengan kode C atau C++ asli yang tidak menggunakan MFC atau ATL. Oleh karena itu, jika Anda menggunakan Wizard Proyek Visual Studio, pilih proyek Win32 dan pastikan bahwa MFC maupun ATL tidak diperiksa.

  2. Atur opsi proyek Anda untuk menautkan ke pustaka runtime C/C++ statis, bukan versi .dll Msvcrt.dll.

  3. Buka properti proyek Anda dan atur Properti Konfigurasi \ C/C++ Pustaka RunTime ke Debug Multi-utas atau Multi-utas, bukan salah satu versi .dll. Jika Anda tidak melakukan langkah ini, aplikasi Anda mungkin tidak berjalan di Windows PE.

  4. Jika Anda berencana untuk menghosting aplikasi Anda pada Windows PE versi 64-bit, atur opsi build proyek untuk mengkompilasi semua biner dengan kompilator x64 di Visual Studio.

  5. Jika Anda berencana untuk menghosting aplikasi Anda pada Windows PE versi 32-bit, atur opsi proyek untuk dikompilasi dengan pengkompilasi x86.

  6. Pastikan proyek Anda tidak memiliki opsi /clr: compiler yang diatur. Opsi ini menghasilkan kode C++ terkelola, yang tidak akan berjalan pada Windows PE.

Peringatan Aplikasi Anda dapat menggunakan file .dll yang disesuaikan yang Anda tulis atau lisensi dari pihak ketiga. Tambahkan file .dll ini ke aplikasi Anda untuk Windows PE. Namun, jangan gunakan Msvcrt.dll dan jangan sertakan file .dll Windows tambahan yang bukan bagian dari Windows PE.

Referensi Kompatibilitas API

Windows PE adalah sistem operasi bootstrap ringan berdasarkan subset komponen dari sistem operasi Windows. Ini dirancang untuk menghosting aplikasi penyebaran dan pemulihan. Dengan demikian, ini berisi banyak biner Windows yang diperlukan untuk menghosting API yang paling penting untuk kelas aplikasi ini. Karena ukuran dan batasan desain lainnya, tidak semua biner Windows ada di Windows PE, dan oleh karena itu tidak semua API Windows ada atau dapat digunakan.

API yang didukung di Windows PE

API berikut didukung di Windows PE:

  1. Set WINDOWS API (Mincore.lib).

  2. DEPLOYMENT Image Servicing and Management (DISM) API (Dismapi.lib).

  3. API Pencitraan untuk Windows (Wimgapi.lib).

Jika API berperilaku sama seperti pada sistem operasi Windows penuh dan seperti yang di dokumentasikan dalam sistem operasi Windows SDK untuk Windows, API akan dianggap didukung dan dapat digunakan oleh aplikasi kecuali dinyatakan lain. Karena Windows PE didasarkan pada komponen dari Windows, ini berisi subset API Windows yang signifikan yang diterbitkan dalam Windows SDK untuk sistem operasi Windows. Parameter, konvensi panggilan, dan perilaku API yang didukung ini akan sama atau hampir sama dengan pada sistem operasi Windows lengkap, kecuali jika dipengaruhi oleh lingkungan Windows PE yang unik. Aplikasi yang hanya menggunakan API ini harus portabel antara sistem operasi Windows penuh dan Windows PE.

Dalam beberapa kasus, subset dari nilai parameter yang mungkin akan dapat digunakan pada Windows PE. Ini mungkin karena kondisi yang unik untuk lingkungan runtime, seperti berjalan pada media baca-saja, tidak memiliki akses ke status persisten, atau keterbatasan desain lainnya. Dalam hal ini, API mungkin tidak didukung, tetapi mungkin masih digunakan untuk menyelesaikan tugas tertentu jika tidak ada alternatif lain.

Secara umum, jika API bekerja dengan tidak benar atau tidak sama sekali di Windows PE, api tidak didukung dan tidak boleh digunakan, bahkan jika berada di biner yang disertakan dalam Windows PE. API mungkin gagal karena Windows PE adalah subset dari sistem operasi Windows, atau karena pertimbangan desain runtime yang unik untuk Windows PE. Kegagalan tersebut tidak dianggap sebagai bug di Windows PE.

Karena banyak komponen Windows tidak ada di Windows PE, banyak API tidak tersedia. Mereka mungkin benar-benar hilang karena biner Windows tempat mereka berada tidak ada. Atau, mereka mungkin hanya ada sebagian karena meskipun biner Windows tempat mereka berada ada, satu atau beberapa biner yang mereka andalkan tidak. Selain itu, beberapa API yang ada di Windows PE tidak berfungsi dengan benar dan bersifat berbeda dari yang mereka lakukan di Windows. API ini tidak didukung dan tidak boleh digunakan, karena perilakunya pada Windows PE tidak terdefinisi.

Terkadang, mungkin tidak ada API yang cocok untuk menyelesaikan tugas tertentu. Untuk menemukan solusi alternatif, Anda akan memerlukan logika aplikasi yang berbeda, desain algoritma yang berbeda, atau mendefinisikan ulang masalah yang mendasar.

WinPE untuk Windows 10

WinPE: Aplikasi Debug