PageFile Swap File
thejiurl@gmail.com
2005-06-02
1 PageFile Swap File Introduction
Windows 2000 uses page-based virtual memory management, contents of some physical pages can be out swapped into PageFile swap file, so these physical pages can be used for new purpose.
In Windows 2000, file "pagefile.sys" is the PageFile swap file。
The physical pages that can be out swapped to PageFile swap file include: thread's kernel mode stack. Pages in process's WorkingSet except for file-mapping, such as, process's heap, thread's user mode stack, process environment block, thread environment block, process's page table, etc. Pages in PagedPool in system address space. Under some conditions, even process's page directory, process's WorkingSet may be also out swapped to PageFile swap file. There's another special case, a file-mapping created by calling CreateFileMapping and parameter 'hFile' is INVALID_HANDLE_VALUE, basing on file-mapping mechanism, the file-mapping is also backed by PageFile swap file.
2 PageFile Swap File Details
The entire PageFile is, from beginning to end, divided into one by one PAGE_SIZE blocks. For 32-bit CPU, PAGE_SIZE is 4KB. When contents of physical pages are out swapped to PageFile, find the unused blocks in PageFile, then write the contents of physical pages into the blocks, then set PTE's corresponding flag bits to indicate that the corresponding page's content of the PTE is in PageFile, and save the corresponding block number in the PTE. When content of page are in swapped from PageFile, according to the information in the PTE, find the corresponding block in PageFile, then read the content of the block into a physical page.
In memory, system maintains a MMPAGING_FILE structure for every PageFile. Depending on the information in the structure, system can know PageFile is which file, system can know which blocks in PageFile have been used, which blocks haven't been used, to find the unused block to use.
MMPAGING_FILE structure defined as following:
typedef struct _MMPAGING_FILE {
PFN_NUMBER Size;
PFN_NUMBER MaximumSize;
PFN_NUMBER MinimumSize;
PFN_NUMBER FreeSpace;
PFN_NUMBER CurrentUsage;
PFN_NUMBER PeakUsage;
PFN_NUMBER Hint;
PFN_NUMBER HighestPage;
PMMMOD_WRITER_MDL_ENTRY Entry[2];
PRTL_BITMAP Bitmap;
PFILE_OBJECT File;
UNICODE_STRING PageFileName;
ULONG PageFileNumber;
BOOLEAN Extended;
BOOLEAN HintSetToZero;
} MMPAGING_FILE, *PMMPAGING_FILE;
RTL_BITMAP structure defined as following:
typedef struct _RTL_BITMAP {
ULONG SizeOfBitMap; // Number of bits in bit map
PULONG Buffer; // Pointer to the bit map itself
} RTL_BITMAP;
Depending on "PFILE_OBJECT File", corresponding PageFile file can be found.
Depending on "PRTL_BITMAP Bitmap", which blocks in PageFile haven't been used can be konwn.
Each bit in Bitmap->Buffer corresponds to a block in PageFile, value of bit is 0 means that corresponding block haven't been used, value of bit is 1 means that corresponding block have been used. Use RtlFindClearBitsAndSet to find unused blocks in Bitmap. SizeOfBitMap depends on the PageFile's MaximumSize.
A PTE's bit0, bit10, bit11 are all 0, means that the content of the page is in PageFile. Bit0 is Valid flag bit, the bit is 0 means that this is an invalid page, the other bits of an invalid page's PTE are all defined and used by system. For an invalid PTE, bit10 is Prototype flag bit. For an invalid PTE and Prototype flag bit is 0, bit11 is Transition flag bit, Transition flag bit is 0 means that the content of the page is in a PageFile.
PTE structure which point to a block in a PageFile defined as following:
{
ULONG Valid : 1; // equal to 0
ULONG PageFileNumber : 4;
ULONG Protection : 5;
ULONG Prototype : 1; // equal to 0
ULONG Transition : 1; // equal to 0
ULONG PageFileBlockNumber : 20;
}
PageFileNumber:
4 bits, used to find the corresponding PageFile in PMMPAGING_FILE MmPagingFile[] array.
There's a PMMPAGING_FILE MmPagingFile[] array in system, which keep pointer of every PageFile's MMPAGING_FILE structure. PageFileNumber is 4 bits so that there may be 16 PageFiles at most in system.
PageFileBlockNumber:
20 bits, the value as a index is used to find the corresponding block in PageFile.
PageFileBlockNumber is 20 bits so that it can index 1M blocks at most. For 32-bit CPU, the size of block is 4KB so that the possible maximum size of a PageFile is 4GB.
Every block needs a bit in Bitmap->Buffer to indicate whether it has been used, so that 1M blocks * 1 bit/block = 1M bits = 256KB, so that the Bitmap->Buffer of maximum size PageFile needs only 256KB memory.
3 Out Swap
Out swap of a page is divided into two steps. First step, page turns to Transition state from Valid state. Second step, the physical page in Transition state is out swapped to PageFile, only modified physical pages can be out swapped to PageFile, and only modified physical pages need be out swapped to PageFile. Only modified physical pages can be out swapped to PageFile, so that we only introduce the modified physical page case.
Page turns to Transition state from Valid state, PTE truns to invliad from valid. The higher-order 20 bits of invalid PTE is still a physical frame number, the physical page is just the physical page that is pointed by PTE when the PTE is valid, and the content of the phsical page is still the content when the PTE is valid. The physical page's PFN (PageFrameNumber) structure also turns to Modified state from Valid state, and be linked into MmModifiedPageListHead list.
Every physical page has a PFN structure, to keep the physical page's relative information, such as whether the physical page has been used, whether the physical page has been modified. The size of PFN structure is 24 Bytes. There's a structure called PFN database in system, it is a PFN array, orderly correspond every physical pages. There are MmZeroedPageListHead list, MmFreePageListHead list, MmStandbyPageListHead list, MmModifiedPageListHead list in system. All modified Transition state physical pages' PFN structure are linked in MmModifiedPageListHead list. All non-modified Transition state physical pages' PFN structure are linked in MmStandbyPageListHead list. All free and zeroed physical pages' PFN structure are linked in MmZeroedPageListHead list. All free and non-zeroed physical pages' PFN structure are linked in MmFreePageListHead list.
PFN in different state has different structure definition, PFN structure in Modified state defined as following:
{
ULONG Flink;
PULONG PteAddress;
ULONG Blink;
USHORT Flags;
USHORT ReferenceCount;
ULONG OriginalPte;
ULONG PteFrame;
}
Flink, next PFN structure's physical frame number in list.
Blink, previous PFN structure's physical frame number in list.
There are mainly two cases that page turns to Transition state from Valid state, one is the out swap of thread's kernel mode stack, one is triming process's WorkingSet.
Every a moment, for example 4 seconds, system thread KeSwapProcessOrStack gets executed. Find the wait state threads which have been wait state longer than the stack protect time, trun those threads' kernel mode stack pages, from Valid state to Transition state.
When available memory is very tight, system thread KeBalanceSetManager will call MmWorkingSetManager, MmWorkingSetManager will call MiTrimWorkingSet to trim WorkingSet. Process's WorkingSet structure keeps the process's all valid pages' virtual address, include all valid pages in user address space, process's page tables, etc. In WorkingSet, modified valid pages include, process's heap, thread's user mode stack, process environment block, thread environment block, process's page table, etc. Triming WorkingSet will turn some valid pages from Valid state to Transition state, and these pages will be removed from WorkingSet. The pages removed from WorkingSet and turned from Valid state to Transition State, can be modified pages or non-modified pages, but modified pages will all be linked in MmModifiedPageListHead list.
When MmAvailablePages < MmMinimumFreePages or the number of physical pages in MmModifiedPageList above or equal to MmModifiedPageMaximum, system thread MiModifiedPageWriter gets executed, finally call MiGatherPagefilePages to out swap the physical pages into PageFile.
In MiGatherPagefilePages, call RtlFindClearBitsAndSet to find the unused block in MMPAGING_FILE's Bitmap, according to the position of found bit in Bitmap, can calculate the corresponding block's block number, remove physical page from MmModifiedPageList, save the block number , PageFileNumber, etc in the physical page's PFN structure's OriginalPte, then write the content of the physcial page into the corresponding block in PageFile.
Call stack of write into PageFile:
#
00 nt!IoAsynchronousPageWrite
01 nt!MiGatherPagefilePages+0x290
02 nt!MiModifiedPageWriterWorker+0x224
03 nt!MiModifiedPageWriter+0x14c
04 nt!PspSystemThreadStartup+0x69
05 nt!KiThreadStartup+0x16
When physical page write to PageFile complete, MiWriteComplete will be executed. In MiWriteComplete, link the physical page to MmStandbyPageList list. This moment, the content of the physical page is still the content when the PTE is valid, corresponding PTE is still in Transition state and points to this physcial page.
When system needs physical pages, system will call, such as, MiRemoveAnyPage, MiRemoveZeroPage to obtain physcial pages. MiRemoveAnyPage, MiRemoveZeroPage first remove physical pages from ZeroedPageList and FreePageList, when there is no physical pages in ZeroedPageList, FreePageList, will remove physical pages from StandbyPageList. In the progress of removing physical pages from StandbyPageList, will set corresponding PTE according to the physical page's PFN structure's OriginalPte. There saved the block's block number which keeped the content of the physical page and other information in PFN structure's OriginalPte, so that the corresponding PTE points to the corresponding block in PageFile. So physical page removed from StandbyPageList can be used for other purpose.
4 In Swap
Program codes access the page which has been out swapped in PageFile, will cause an exception, exception handler procedure will in swap the content of the page. The PTE corresponding the out swapped page in PageFile is invalid, and points to a block in PageFile. Codes access the content of the page which has been out swapped in PageFile, because the corresponding PTE is invalid, will cause an Page-Fault exception, the interrupt vector of Page-Fault exception is 0xe, the entry address of the interrupt handler procedure is KiTrap0E. In Page-Fault exception processing, according to the faulting address, find the corresponding PTE, PTE's bit0, bit10, bit11 are all 0, means that the content of the page is in PageFile. According to PageFileNumber in PTE, find the corresponding PageFile in MmPagingFile[], then according to PageFileBlockNumber in PTE, can find the needed block in the PageFile. Read the corresponding block into a physical page, then set the PTE to point to the physical page, and set the PTE valid, the in swapping is complete.
In Page-Fault exception processing, finding that the PTE's bit10, bit11 are all 0, MiDispatchFault will call MiResolvePageFileFault. MiResolvePageFileFault find the corresponding block according to PageFileNumber, PageFileBlockNumber in PTE, make ready to read, then return. MiDispatchFault will call IoPageRead to read the corresponding block in PageFile into physical page.
Call stack of MiResolvePageFileFault:
#
00 nt!MiResolvePageFileFault
01 nt!MiDispatchFault+0x13c
02 nt!MmAccessFault+0xc28
03 nt!KiTrap0E+0xc3
...
Call stack of IoPageRead:
#
00 nt!IoPageRead
01 nt!MiDispatchFault+0x231
02 nt!MmAccessFault+0xc28
03 nt!KiTrap0E+0xc3
...
END.
thejiurl@gmail.com
2005-06-02
2005-06-02
1 PageFile Swap File Introduction
Windows 2000 uses page-based virtual memory management, contents of some physical pages can be out swapped into PageFile swap file, so these physical pages can be used for new purpose.
In Windows 2000, file "pagefile.sys" is the PageFile swap file。
The physical pages that can be out swapped to PageFile swap file include: thread's kernel mode stack. Pages in process's WorkingSet except for file-mapping, such as, process's heap, thread's user mode stack, process environment block, thread environment block, process's page table, etc. Pages in PagedPool in system address space. Under some conditions, even process's page directory, process's WorkingSet may be also out swapped to PageFile swap file. There's another special case, a file-mapping created by calling CreateFileMapping and parameter 'hFile' is INVALID_HANDLE_VALUE, basing on file-mapping mechanism, the file-mapping is also backed by PageFile swap file.
2 PageFile Swap File Details
The entire PageFile is, from beginning to end, divided into one by one PAGE_SIZE blocks. For 32-bit CPU, PAGE_SIZE is 4KB. When contents of physical pages are out swapped to PageFile, find the unused blocks in PageFile, then write the contents of physical pages into the blocks, then set PTE's corresponding flag bits to indicate that the corresponding page's content of the PTE is in PageFile, and save the corresponding block number in the PTE. When content of page are in swapped from PageFile, according to the information in the PTE, find the corresponding block in PageFile, then read the content of the block into a physical page.
In memory, system maintains a MMPAGING_FILE structure for every PageFile. Depending on the information in the structure, system can know PageFile is which file, system can know which blocks in PageFile have been used, which blocks haven't been used, to find the unused block to use.
MMPAGING_FILE structure defined as following:
typedef struct _MMPAGING_FILE {
PFN_NUMBER Size;
PFN_NUMBER MaximumSize;
PFN_NUMBER MinimumSize;
PFN_NUMBER FreeSpace;
PFN_NUMBER CurrentUsage;
PFN_NUMBER PeakUsage;
PFN_NUMBER Hint;
PFN_NUMBER HighestPage;
PMMMOD_WRITER_MDL_ENTRY Entry[2];
PRTL_BITMAP Bitmap;
PFILE_OBJECT File;
UNICODE_STRING PageFileName;
ULONG PageFileNumber;
BOOLEAN Extended;
BOOLEAN HintSetToZero;
} MMPAGING_FILE, *PMMPAGING_FILE;
RTL_BITMAP structure defined as following:
typedef struct _RTL_BITMAP {
ULONG SizeOfBitMap; // Number of bits in bit map
PULONG Buffer; // Pointer to the bit map itself
} RTL_BITMAP;
Depending on "PFILE_OBJECT File", corresponding PageFile file can be found.
Depending on "PRTL_BITMAP Bitmap", which blocks in PageFile haven't been used can be konwn.
Each bit in Bitmap->Buffer corresponds to a block in PageFile, value of bit is 0 means that corresponding block haven't been used, value of bit is 1 means that corresponding block have been used. Use RtlFindClearBitsAndSet to find unused blocks in Bitmap. SizeOfBitMap depends on the PageFile's MaximumSize.
A PTE's bit0, bit10, bit11 are all 0, means that the content of the page is in PageFile. Bit0 is Valid flag bit, the bit is 0 means that this is an invalid page, the other bits of an invalid page's PTE are all defined and used by system. For an invalid PTE, bit10 is Prototype flag bit. For an invalid PTE and Prototype flag bit is 0, bit11 is Transition flag bit, Transition flag bit is 0 means that the content of the page is in a PageFile.
PTE structure which point to a block in a PageFile defined as following:
{
ULONG Valid : 1; // equal to 0
ULONG PageFileNumber : 4;
ULONG Protection : 5;
ULONG Prototype : 1; // equal to 0
ULONG Transition : 1; // equal to 0
ULONG PageFileBlockNumber : 20;
}
PageFileNumber:
4 bits, used to find the corresponding PageFile in PMMPAGING_FILE MmPagingFile[] array.
There's a PMMPAGING_FILE MmPagingFile[] array in system, which keep pointer of every PageFile's MMPAGING_FILE structure. PageFileNumber is 4 bits so that there may be 16 PageFiles at most in system.
PageFileBlockNumber:
20 bits, the value as a index is used to find the corresponding block in PageFile.
PageFileBlockNumber is 20 bits so that it can index 1M blocks at most. For 32-bit CPU, the size of block is 4KB so that the possible maximum size of a PageFile is 4GB.
Every block needs a bit in Bitmap->Buffer to indicate whether it has been used, so that 1M blocks * 1 bit/block = 1M bits = 256KB, so that the Bitmap->Buffer of maximum size PageFile needs only 256KB memory.
3 Out Swap
Out swap of a page is divided into two steps. First step, page turns to Transition state from Valid state. Second step, the physical page in Transition state is out swapped to PageFile, only modified physical pages can be out swapped to PageFile, and only modified physical pages need be out swapped to PageFile. Only modified physical pages can be out swapped to PageFile, so that we only introduce the modified physical page case.
Page turns to Transition state from Valid state, PTE truns to invliad from valid. The higher-order 20 bits of invalid PTE is still a physical frame number, the physical page is just the physical page that is pointed by PTE when the PTE is valid, and the content of the phsical page is still the content when the PTE is valid. The physical page's PFN (PageFrameNumber) structure also turns to Modified state from Valid state, and be linked into MmModifiedPageListHead list.
Every physical page has a PFN structure, to keep the physical page's relative information, such as whether the physical page has been used, whether the physical page has been modified. The size of PFN structure is 24 Bytes. There's a structure called PFN database in system, it is a PFN array, orderly correspond every physical pages. There are MmZeroedPageListHead list, MmFreePageListHead list, MmStandbyPageListHead list, MmModifiedPageListHead list in system. All modified Transition state physical pages' PFN structure are linked in MmModifiedPageListHead list. All non-modified Transition state physical pages' PFN structure are linked in MmStandbyPageListHead list. All free and zeroed physical pages' PFN structure are linked in MmZeroedPageListHead list. All free and non-zeroed physical pages' PFN structure are linked in MmFreePageListHead list.
PFN in different state has different structure definition, PFN structure in Modified state defined as following:
{
ULONG Flink;
PULONG PteAddress;
ULONG Blink;
USHORT Flags;
USHORT ReferenceCount;
ULONG OriginalPte;
ULONG PteFrame;
}
Flink, next PFN structure's physical frame number in list.
Blink, previous PFN structure's physical frame number in list.
There are mainly two cases that page turns to Transition state from Valid state, one is the out swap of thread's kernel mode stack, one is triming process's WorkingSet.
Every a moment, for example 4 seconds, system thread KeSwapProcessOrStack gets executed. Find the wait state threads which have been wait state longer than the stack protect time, trun those threads' kernel mode stack pages, from Valid state to Transition state.
When available memory is very tight, system thread KeBalanceSetManager will call MmWorkingSetManager, MmWorkingSetManager will call MiTrimWorkingSet to trim WorkingSet. Process's WorkingSet structure keeps the process's all valid pages' virtual address, include all valid pages in user address space, process's page tables, etc. In WorkingSet, modified valid pages include, process's heap, thread's user mode stack, process environment block, thread environment block, process's page table, etc. Triming WorkingSet will turn some valid pages from Valid state to Transition state, and these pages will be removed from WorkingSet. The pages removed from WorkingSet and turned from Valid state to Transition State, can be modified pages or non-modified pages, but modified pages will all be linked in MmModifiedPageListHead list.
When MmAvailablePages < MmMinimumFreePages or the number of physical pages in MmModifiedPageList above or equal to MmModifiedPageMaximum, system thread MiModifiedPageWriter gets executed, finally call MiGatherPagefilePages to out swap the physical pages into PageFile.
In MiGatherPagefilePages, call RtlFindClearBitsAndSet to find the unused block in MMPAGING_FILE's Bitmap, according to the position of found bit in Bitmap, can calculate the corresponding block's block number, remove physical page from MmModifiedPageList, save the block number , PageFileNumber, etc in the physical page's PFN structure's OriginalPte, then write the content of the physcial page into the corresponding block in PageFile.
Call stack of write into PageFile:
#
00 nt!IoAsynchronousPageWrite
01 nt!MiGatherPagefilePages+0x290
02 nt!MiModifiedPageWriterWorker+0x224
03 nt!MiModifiedPageWriter+0x14c
04 nt!PspSystemThreadStartup+0x69
05 nt!KiThreadStartup+0x16
When physical page write to PageFile complete, MiWriteComplete will be executed. In MiWriteComplete, link the physical page to MmStandbyPageList list. This moment, the content of the physical page is still the content when the PTE is valid, corresponding PTE is still in Transition state and points to this physcial page.
When system needs physical pages, system will call, such as, MiRemoveAnyPage, MiRemoveZeroPage to obtain physcial pages. MiRemoveAnyPage, MiRemoveZeroPage first remove physical pages from ZeroedPageList and FreePageList, when there is no physical pages in ZeroedPageList, FreePageList, will remove physical pages from StandbyPageList. In the progress of removing physical pages from StandbyPageList, will set corresponding PTE according to the physical page's PFN structure's OriginalPte. There saved the block's block number which keeped the content of the physical page and other information in PFN structure's OriginalPte, so that the corresponding PTE points to the corresponding block in PageFile. So physical page removed from StandbyPageList can be used for other purpose.
4 In Swap
Program codes access the page which has been out swapped in PageFile, will cause an exception, exception handler procedure will in swap the content of the page. The PTE corresponding the out swapped page in PageFile is invalid, and points to a block in PageFile. Codes access the content of the page which has been out swapped in PageFile, because the corresponding PTE is invalid, will cause an Page-Fault exception, the interrupt vector of Page-Fault exception is 0xe, the entry address of the interrupt handler procedure is KiTrap0E. In Page-Fault exception processing, according to the faulting address, find the corresponding PTE, PTE's bit0, bit10, bit11 are all 0, means that the content of the page is in PageFile. According to PageFileNumber in PTE, find the corresponding PageFile in MmPagingFile[], then according to PageFileBlockNumber in PTE, can find the needed block in the PageFile. Read the corresponding block into a physical page, then set the PTE to point to the physical page, and set the PTE valid, the in swapping is complete.
In Page-Fault exception processing, finding that the PTE's bit10, bit11 are all 0, MiDispatchFault will call MiResolvePageFileFault. MiResolvePageFileFault find the corresponding block according to PageFileNumber, PageFileBlockNumber in PTE, make ready to read, then return. MiDispatchFault will call IoPageRead to read the corresponding block in PageFile into physical page.
Call stack of MiResolvePageFileFault:
#
00 nt!MiResolvePageFileFault
01 nt!MiDispatchFault+0x13c
02 nt!MmAccessFault+0xc28
03 nt!KiTrap0E+0xc3
...
Call stack of IoPageRead:
#
00 nt!IoPageRead
01 nt!MiDispatchFault+0x231
02 nt!MmAccessFault+0xc28
03 nt!KiTrap0E+0xc3
...
END.
thejiurl@gmail.com
2005-06-02

91 Comments:
Thank you!
[url=http://gqbopxia.com/ohnm/vqqh.html]My homepage[/url] | [url=http://zxyylvhv.com/qivo/kzzr.html]Cool site[/url]
Well done!
My homepage | Please visit
Well done!
http://gqbopxia.com/ohnm/vqqh.html | http://pyzveacx.com/aauh/cphv.html
第77回 日本ダービー 2010 予想、オッズ、厳選買い目は?人気が平然と馬券に絡む理由とは!?見事に展開を読んで結果を的中させる
モバゲータウンでいろんな異性と交流を深めあいませんか。異性に対して経験がない方でも簡単にお楽しみいただける、シンプルかつ効率的に優れているサイトとなっています
全世界で大ブームを巻き起こしているツイッター!!それを利用して今まで経験したことがないような恋を経験してみませんか
モテる度チェッカーが今回リニューアルしました!!今迄と違い診断内容にモテない人と診断された方を救済する、速攻効果が出るモテる為のアドバイスが付きます、またモテる診断された人には、より一層のモテ・テクニックを手に入れませんか
第60回 安田記念 2010 予想 オッズ 出走馬 枠順で万馬券をズバリ的中!絶対なるデータが確実に当てるための秘訣
今話題のツイッターで理想の関係を築きませんか。ツイッターで自分の出来事をリアルタイムで表現して相手にその想いを伝えましょう
第60回 安田記念 2010 予想 オッズから展開と結果をズバリ当てる!出走馬、枠順など全てを考慮にいれた緻密なデータをもとに検証
気楽に遊べる人募集です♪まずはお友達からヨロシクね!! freedum@docomo.ne.jp
スタービーチで素敵な愛を掴みませんか?愛に対する理想や想いを現実にしていきましょう
モバゲータウンでは今までとは一味違う出逢いを体験する事ができるのです。これまで良い出逢いがなかった人にはもってこいの無料登録型の掲示板です
ゲーマー達のステイタス、ゲーマーチェッカーであなたのゲーマー度数を測定!!測定結果を元に自分と同レベルのオンライン対戦も出来ます。ゲームが得意な人もそうでない人もどちらも楽しめますよ
セフレ掲示板で大人の恋愛をしてみませんか?割り切ったセフレと快楽のみを求めた恋愛をしてくださいませ
日本最大級のであいコミュニティ「スタービーチ」で恋人を探しませんか。素敵なであいを経験して理想の人と楽しい思い出を作りましょう
スタービーチが完全リニューアルして復活しました!!あの伝説級のであい系サイトが満を持して再降臨。煌めくような今この瞬間にあなたの胸にもときめきをお届けします
であい系の元祖はやっぱりスタービーチ!初めてであい系にチャレンジする娘も多いここならゲット率は最強
モバゲータウンでであいを楽しみませんか。気軽に誰でも楽しめるであいサイトとなっています。こんな事をしてみたいなど希望の事が実現できる、そんなであいコミュニティサイトです
greeで楽しめちゃうであい掲示板実現!ここで楽しみませんか?いろんなであいをここで見ていきましょう
簡単な設問に答えるだけで、自分の隠されたH度数がわかっちゃうHチェッカー!まさかの結果が待ってるかも。気になる人に上手く使えば、即美味しい展開に持ち込めるかも
誰もが知ってるツイッターがあなたにであいを!?ツイッター利用者増加=であえる確立急増中!!相性ぴったりの方とお付き合いしてみてはいかがでしょうか
あなたの人生が大きく変わります!薔薇色の不倫であなたの望む不倫体験ができる!割り切り~契約型など、あなたの理想を現実に変える!当サイト独自システムだから誰にもばれずに、安心してご利用頂けます
モバゲータウンに出会い専用BBSが完成!!誰もが望んでいたこのBBSで出会いをみつけてみませんか?素敵な出会いからちょっとエッチな出会いまで幅広い出会いを提供しています
第51回 宝塚記念 2010 予想データを完全攻略!出走馬 枠順などからはじきだすデータは文句なし!これで平成22年の宝塚記念はもらったも同然!波乱の展開もあり
スタビでの出合いは最高の思い出になる事は間違いありません。運命の人に出逢うまで完全サポートいたしますのでどなたでも気軽に利用する事ができます
お酒の席には必須のSM度チェッカー、実は真面目な娘程、間逆なドS女王様、遊んでそうな娘はドMな奴隷願望が有るとか。お手軽SM度診断結果を元に隠れた性癖を暴いて楽しもう
宝塚記念 2010 予想データから完全攻略!出走馬 枠順などからはじきだすデータは最強!これで平成22年の宝塚記念はもらったも同然!波乱の展開もあり
ツイッターから始まる人間関係!今話題のツイッターなら新しい出逢いがすぐに見つかります
全国からメル友募集中の女の子達が、あなたとのであいを待ってるよ!無料エントリーで自由な恋愛を楽しんじゃお
スタービーチがどこのサイトよりも遊べる確率は高いんです。登録無料で新しい恋をGETしてみませんか
出会い系サイトで逆援助生活をしよう!エッチなセレブ女性たちが集まっています
モバゲーを使ってご近所さんと知り合えちゃう!新感覚のコミュニティサービスを利用してみよう
今の時代簡単に金持ちになる方法は中々無いけど、可能性は誰しも秘めてます!!そう一番手っ取り早いのは玉の輿です。この玉の輿度チェッカーをキッカケに金持ちになった方が、意外と多いのです。是非あなたも一段高みを目指しませんか
一流セレブたちが出会いを求めて集まっています。彼女たちからの逆援助でリッチな生活を楽しみましょう
芸能人のプライベートな流出画像など、色々なヤバい写真も見れる。無料登録で思う存分楽しんで下さい
セレブの為の出会い系、セレブの雫では女性会員数も増え、男性会員様が不足するという状態となっております。そこで先着順に、男性会員様を募集しております
日本で一番会員数が多いのはやっぱりスタービーチ!若い娘から熟女まで好みのご近所さんがすぐに見つかる☆無料期間中に試してみませんか
お金持ちの女性と出会い、彼女たちとHするだけで謝礼がもらえるサイトをご存じですか?高収入の女性ほど、お金を使っていろいろな男性と遊んでいます
流行のモバゲーで友達たくさん!運命の出会いがあるかも!?まだ初めていない人も無料ゲームで遊ぼう
みんなでワイワイやるならHチェッカー!!これ一つ有れば偶然を装いつつ、気になる人の隠れエッチ度も分ちゃいます。お近づきアドバイスも付いてるから、これを機会に親密になろう
副業 在宅 でも出来る モニターアルバイト 募集!数ある副業の中、馬券モニター程稼げる副業はない!初心者の方でも簡単にできるのが最大の特権です
スタービーチで幸せ掴みませんか?楽しめる出.会.いをしたいならここしかない!今までとは一味もふた味も違う出.会.いを体験していきましょう
女の子に逆援助してほしい、女の子と真剣にお付き合いしたい、複数プレイをやってみたい、童貞・処女を卒業したいのなら新感覚コミュニティ・ラブフリーでメル友を探そう
大人気モバゲーが遂に出合いの場所に!モバゲーだから気軽に出会える!出合いに縁がなかった方も是非ご利用くださいませ
スタービーチは誰にでも出逢いという奇跡をもたらしてくれる。スタビで理想の関係作りしてみませんか
流行りの検索ワードの番組、井の中のカ○ズ君で紹介された在宅ホスト倶楽部っていうワードで簡単にお金稼ぎました。携帯からgoogle検索にアクセスして在宅ホスト倶楽部って検索してみてください☆男性の方なら家でいるだけで1日2万円ぐらい稼げちゃうから本当に楽ちんだよ。誰か一緒にこの仕事で盛り上がろう
モバゲーでは友達から恋愛まで、様々な出 会いを探せる無料のコミュニティサイトです。常時サポートスタッフが掲示板をチェック、サクラや業者を排除しておりますので安心してご利用いただけます
日本最大級の出会いコミュニティ「スタービーチ」で探しませんか。素敵な出会いを経験して理想の人と楽しい思い出を作りましょう
スタービーチなら好みの女性がきっと見つかる!会員数ナンバーワンのスタビでご近所さんを探そう
日本最大級の出会いコミュニティ「スタービーチ」で探しませんか。素敵な出会いを経験して理想の人と楽しい思い出を作りましょう
出会い専門のモバゲーSNSが誕生!メル友、恋人、セフレetc…貴方の理想に合った関係になれちゃいます。素敵な人と過ごしたいならココで見つけてみませんか
ゲームよりも出会い目的でモバゲーが大人気です。無料期間中に遊んでみませんか
セフレ倶楽部は 童貞、 逆援、 人妻の 3つのジャンルで構成されており、セレブ女性とセックスするだけで、男性会員へ高額な報酬が支払われるシステムになっております。一定の数の男性会員が集まれば、会員の募集を一度締め切らせて頂きますのでお早めにどうぞ
最近スタービーチが女の子のコミュニティーサイトで話題中みたい!!夏休み目前ってのもあり登録比率に女性の数が半端ね~、やっぱり夏に一人は辛すぎや~とか思ってたら、暇な娘多すぎ・彼女簡単に出来ちゃった
出 会いを探しているのなら会員数ナンバーワンのスタービーチ!開放的な夏休みはここで新しい出 会いを見つけよう!
夏休み目前になり、一人で大事な休みを過ごすのは誰でもイヤと違う?そんな時にモテる度チェッカーで簡単診断、この夏アナタも彼氏・彼女と過ごすための貴重なアドバイスが手に入りますよ、もうアドバイスに対しての感謝のメールが毎日!!アナタもこの夏を乗り遅れるな
グリー発信!!出会い専門SNS誕生、今話題のgreeから出会いをGETしよう。greeにしかできない事が盛りだくさん!!気軽にメールするだけで出会えるサイト・・・貴方の理想の異性と出会いませんか
話題のgreeで新しい出会いを見つけよう!夏休みに入ってヒマしてる女の子が急増中!無料期間中にご近所の女の子をGETしちゃおう
セフレを探しているならここ!割りきった体の関係を探している女性と出会いのチャンス!セックス目的なので会ってすぐにヤれちゃいます
モバゲー専門の出会い掲示板が誕生!出会いを求めている方にはオススメのサイトです。幸せな時間を過ごしたい方、淋しい思いをしたくない方はぜひご覧ください
逆援助でお金持ちになる事が可能なこの時代。セックスのテクニックさえあれば簡単に大金をゲットする事ができます
スタビでできる新しい恋・・・素敵な出合いをするならスタビから始めてみませんか?女性に面識のない方でもサポート機能があるから安心してご利用できます。是非一度利用してみて下さい
気になる人の性癖を知ることは、その人に近づく良いキッカケや話題作りに成ります。そんな時にSM度チェッカーを使ってみて下さい。話が合い一気に仲良くなり、どのまま・・・な関係にその日の内に為れるよ。なんと言っても今は夏休みですからね
夏休みに伴い新しくリニューアルのスタービーチです。最近は似たサイトの乱立でイメージ悪化の一途を辿ってましたからここで一新、元スタビ社員による心機一転。これを機会に楽しい夏休みライフを送って下さい
モバゲー出会い掲示板は色々な種類の出会いを扱っております。登録無料で新しい恋の始まる事は確実です
今話題沸騰中!?新感覚出会いをツイッターで体験しませんか?リアルタイムで相手が何をしてるか分かるから、理想の人かどうかが簡単に分かる。貴方の理想の人をGETしませんか
素敵な出 会 いで愛を育む♪理想の人と楽しめる関係を築きませんか?mコミュでしか味わえない幸せを掴みましょう
スタービーチで会える!?理想の異性をGETしよう☆素敵な出会いばかりだから求めている関係も作りやすい!!貴方が求めているのはどういった恋ですか?
他の人が言ってる名言や格言って良い事言ってるな~とか思ってる方、名言チェッカーで今日から自分に相応しい言葉を見つけませんか!!これでどんな人にも一目置かれる存在に為れますよ
mixiをも凌駕する出会い率!!出会いをするならここしかない♪mixiより出会えてしまうこのサイト。一度ハマれば辞めれません。スタービーチで素敵な出会いをしちゃいましょう
モバゲーで出会いをすれば楽しい事は間違いありません。暑いからこそ出会いを楽しむべきなのです。登録無料で簡単に利用可能!
モバゲータウンでは恋愛から出合いまでのキッカケをつかめる無料のコミュニティサイトです。常時サポートスタッフが掲示板をチェック、サクラや業者を排除しておりますので安心してご利用いただけます
グリーで提供しているのは他社にはできない出 会 い。質の悪い出 会 いよりも質の良いものを提供しております。体験してもらえれば違いは一目瞭然
スタビが今一番アツイのはご存じでしょうか?夏休みで出会いを探している娘とすぐに会えちゃうんです。登録無料でここまで出会える所は他には存在しません。今登録して良いパートナーに巡り合おう
出会いのシーズン、夏到来!スタービーチでご近所さんと知り合っちゃおう!ひと夏の体験も女の子は求めている
モバゲーでついに出会いができる!?楽しめる出会い、求めていた出会いはココから始まる。素敵な出会いでまずは関係づくりwしていきましょう
スタービーチで始まる素敵な出 合いをしていきませんか。楽しめる出 合いを経験するにはココから始まる!!最高の出 合いがあなたを待っている
スタビで出会いができる!!いつでもどこでも出会いが可能なスタービーチで最高の出会いをしてみませんか
簡単な出逢いはココでできる☆素敵な出逢いをmコミュで体験していきませんか?楽しめる出逢いを経験するならここしかない!!まずはお試しを
新時代突入!ツイッターで始まる出逢い…ここでしかできない出逢いが新しい風を巻き起こす!!素敵な巡りあわせを体験していこう!
あなたの秘められたSM度がわかるSMチェッカー!簡単な質問に答えるだけで自分の隠された部分が分かります!みんなで試してみよう
今やモバゲーは押しも押されもせぬ人気SNS!当然出 会いを求めてる人も多い!そこで男女が出 逢えるコミュニティーが誕生!ここなら友達、恋人が簡単にできちゃいますよ
もう夏休みも終わりに近づき、この夏最後の思い出を作りたいと焦ってる方が、モバゲーのコミュニティーに書かれてましたよ!!折角なんで夏の思い出作りに協力して自分も美味しい思いをしてみるのはどうですか?大手スポンサーサイトが付いてるので全部タダですよ
最近はどこのSNSサイトも規制ばっかりで、ちょっと出 合いに関して書き込みするとアク禁食らうけど、夏休み終盤に差し掛かり色々なサイトを調べた結果、グリーだけはどうも規制が緩んでるみたいです。今がチャンスの時期ですよ
ツイッターで出 合 いを求めるのです。気の合う異性と交流して楽しいひと時をお過ごしください。登録無料で使えるので気軽さは100点満点!
mコミュでならご近所さんと出会える確率99%!友達や恋人を探してる人はここで見つけてみませんか
夏休みももう終わりに近づきこのまま一人は寂しいのちがう?そこでモテる度チェッカーを使い自分がなぜモテないか診断してもらいましょう。10~20代の女性アドバイザーが多数在籍してるので、アドバイスを参考に夏終盤を楽しもう
モバゲーでアエル理想のコミュニティー掲示板誕生!!誰でも簡単に出 会いをお楽しみいただけます。素敵な出会いを望んでいる方にピッタリ!特典も充実しているのでぜひご利用ください
マイルチャンピオンシップ 2010 一般には漏れないデータを極秘公開。まさかの新事実が発覚!
My brother suggested I might like this website. He was entirely right.
This post actually made my day. You cann't imagine just how much time I had spent for this info! Thanks!
My web-site; buy wordpress themes
发表评论
<< Home